表达式求值模板代码
#include<iostream>
#include<stack>
#include<map>
#include<unordered_map>
using namespace std;
unordered_map<char,int> priority;
stack<int> nums;
stack<int> op;
string s;
void eval(){
int a=nums.top();nums.pop();
int b=nums.top();nums.pop();
char c=op.top(); op.pop();
if(c=='+') nums.push(a+b);
if(c=='-') nums.push(b-a);
if(c=='*') nums.push(a*b);
if(c=='/') nums.push(b/a);
}
int solve(string &s){
for(int i=0;i<s.length();i++){
if(s[i]>='0'&&s[i]<='9'){
int j=i,num=0;
for(;j<s.length()&&s[j]>='0'&&s[j]<='9';j++) num=num*10+s[j]-'0';
i=j-1;
nums.push(num);
}else if(s[i]=='('){
op.push('(');
}else if(s[i]==')'){
while(op.top()!='(') eval();
op.pop();
}else{
while(op.size()&&priority[s[i]]<=priority[op.top()])
eval();
op.push(s[i]);
}
}
while(op.size()) eval();
return nums.top();
}
int main(){
priority['+']=priority['-']=1;
priority['*']=priority['/']=2;
cin>>s;
cout<<solve(s);
}