表达式求值问题 #include<iostream> #include<cstring> #include<stack> using namespace std; #define MAX 30 char f1[MAX],f2[MAX]; int s1=0,s2=0; bool isdigit(char c){ if(c>='0' && c<='9')return true; return false; } void xx(char c){ if(c=='+'|| c=='-'){ while(s2 &&f2[s2-1]!='(') f1[s1++]=f2[--s2]; f2[s2++]=c; } else if(c=='('|| c=='^'){ f2[s2++]=c; } else if(c==')'){ while(s2 && f2[s2-1]!='(') f1[s1++]=f2[--s2]; s2--; } else { while(s2 &&(f2[s2-1]=='^'||f2[s2-1]=='*'||f2[s2-1]=='/')) f1[s1++]=f2[--s2]; f2[s2++]=c; } } int cal(){ stack<int>s;int result=0; for(int i=0;i<s1;++i) cout<<f1[i]<<" "; cout<<endl; for(int i=0;i<s1;++i) if(isdigit(f1[i])){ s.push(f1[i]-'0'); } else{ int a=s.top();s.pop(); int b=s.top();s.pop(); switch(f1[i]) { case '+':result=a+b;s.push(result);break; case '*':result=a*b;s.push(result);break; case '-':result=b-a;s.push(result);break; case '/':result=b/a;s.push(result);break; default: break; } }return s.top(); } int main(int argc, char *argv[]) { string s; cin>>s; for(int i=0;i<s.size();++i) if(isdigit(s[i]))f1[s1++]=s[i]; else xx(s[i]); while(s2)f1[s1++]=f2[--s2]; cout<<cal()<<endl; return 0; }