#include <iostream>
#include <string>
#include <stack>
#include <map>
#include <sstream>
using namespace std;
int main(){
string exp;
map<char,int> prior;
prior['+']=prior['-']=1,prior['*']=prior['/']=2;
cin>>exp;
exp="("+exp+")";
stack<char> ops;
struct term{int num;char ch='\0';}suffexp[101]={};
int u=0;
for(size_t i=0;i<exp.length();i++){
if(exp[i]=='(') ops.push(exp[i]);
else if(exp[i]==')'){
while(!ops.empty()&&ops.top()!='(') suffexp[++u].ch=ops.top(),ops.pop();
ops.pop();
}else if(((exp[i]=='+'||exp[i]=='-')&&exp[i-1]=='('&&(exp[i+1]>='0'&&exp[i+1]<='9'))||(exp[i]>='0'&&exp[i]<='9')){
int neg=1,absnum=0,num=0;
if(exp[i]=='+'||exp[i]=='-'){
neg=(exp[i]=='+'?1:-1);
for(int j=i+1;exp[j]>='0'&&exp[j]<='9';j++) absnum=absnum*10+exp[j]-'0',i=j;
num=absnum*neg;
}else for(int j=i;exp[j]>='0'&&exp[j]<='9';j++) num=num*10+exp[i=j]-'0';
suffexp[++u].num=num;
}else{
while(!ops.empty()&&ops.top()!='('&&prior[ops.top()]>prior[exp[i]]) suffexp[++u].ch=ops.top(),ops.pop();
ops.push(exp[i]);
}
}
stack<int> nums;
for(int i=1;i<=u;i++){
if(!suffexp[i].ch) nums.push(suffexp[i].num);
else{
int a=nums.top();nums.pop();
int b=nums.top();nums.pop();
if(suffexp[i].ch=='+') nums.push(a+b);
if(suffexp[i].ch=='*') nums.push(a*b);
if(suffexp[i].ch=='-') nums.push(b-a);
}
}
cout<<nums.top()<<endl;
return 0;
}
这是一道表达式求值,但是为什么它RE了?