• 后缀表达式求值



    任务描述

    本关任务:熟练掌握STL模板库中栈stack的基本操作,并利用栈实现后缀表达式求解。

    相关知识

    为了完成本关任务,你需要掌握:1.后缀表达式求解。

    后缀表达式求解 算法思想:从左至右扫描表达式,遇到数字时,将数字压入栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 - 运算符 - 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。

    例如后缀表达式2 1 3 + * 4 -, 后缀表达式求值

    编程要求

    本关的编程任务是补全右侧代码片段main中Begin至End中间的代码,具体要求如下:

    读取后缀表达式,并基于栈的插入、删除等基本操作实现后缀表达式求解,表达式中所有的操作数为单一的数字:0~9,运算符仅包含:+ - * ( )。

    输入输出说明

    本任务的输入为单个测试用例,输入长度不超过100,且操作数仅为0~9之间的整数,操作符只包含“+-*/”等算数运算符的中缀表达式,输出为该中缀表达式的计算结果。

    以下是平台的测试样例:

    测试输入:123+4*+5- 预期输出:16

    输入格式:后缀表达式 输出格式:运算结果,末尾换行

    #include<iostream>
    #include<stack>
    #include<string.h>
    #include<string>
    using namespace std;
    
    int main() {
        string s;
        cin>>s;
        stack<int>st;
        for(int i=0;i<s.size();i++){
            if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
                int num1=st.top();
                st.pop();
                int num2=st.top();
                st.pop();
                if(s[i]=='+')st.push(num2+num1);
                if(s[i]=='-')st.push(num2-num1);
                if(s[i]=='*')st.push(num2*num1);
                if(s[i]=='/')st.push(num2/num1);
            }else{
                char ch=s[i];
                string s2;
                char s1[2]={ch,0};
                s2=s1;
                st.push(stoi(s2));
            }
        }
        
        cout<<st.top();
    
    }
  • 相关阅读:
    进程和程序的关系
    进程和线程区别和联系
    什么是进程,进程的特征
    23.each和map函数
    22.仿淘宝五角星评论(链式编程、隐式迭代)
    19.阻止事件冒泡e.stopPropagation();
    18.阻止默认操作e.preventDefault();防止冒泡事件:e.stopPropagation()
    15.仿腾讯固定导航栏
    14.仿京东右侧边导航栏
    算法学习:树上差分
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13917638.html
Copyright © 2020-2023  润新知