后缀表达式求值


任务描述

本关任务:熟练掌握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();

}
原文地址:https://www.cnblogs.com/xxxsans/p/13917638.html