任务描述
本关任务:熟练掌握STL模板库中栈stack的基本操作,并利用栈实现后缀表达式求解。
相关知识
为了完成本关任务,你需要掌握:1.后缀表达式求解。
后缀表达式求解 算法思想:从左至右扫描表达式,遇到数字时,将数字压入栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 - 运算符 - 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
例如后缀表达式2 1 3 + * 4 -
:
编程要求
本关的编程任务是补全右侧代码片段main中Begin至End中间的代码,具体要求如下:
读取后缀表达式,并基于栈的插入、删除等基本操作实现后缀表达式求解,表达式中所有的操作数为单一的数字:0~9,运算符仅包含:+ - * ( )。
输入输出说明
本任务的输入为单个测试用例,输入长度不超过100,且操作数仅为0~9
之间的整数,操作符只包含“+-*/
”等算数运算符的中缀表达式,输出为该中缀表达式的计算结果。
以下是平台的测试样例:
测试输入:123+4*+5- 预期输出:16
输入格式:后缀表达式 输出格式:运算结果,末尾换行\n
#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(); }