#include <iostream.h> struct list { int index; int a; char b; }; struct list s[100]; int comp1(char a,char b) { char op[4][2]={'*','/','+','-','(','(',')',')'}; int i; int a1,b1; for(i=0;i<4;i++) if (a==op[i][0] || a==op[i][1]) { a1=i; break; } for(i=0;i<4;i++) if (b==op[i][0] || b==op[i][1]) { b1=i; break; } if (a1<b1) return 1; else return 0; } int comp2(char a,char b) { char op[4][2]={'(','(','*','/','+','-',')',')'}; int i; int a1,b1; for(i=0;i<4;i++) if (a==op[i][0] || a==op[i][1]) { a1=i; break; } for(i=0;i<4;i++) if (b==op[i][0] || b==op[i][1]) { b1=i; break; } if (a1<b1) return 1; else return 0; } int oper(int a,int b,char op) { int result; if(op=='*') result=a*b; else if(op=='/') result=a/b; else if(op=='+') result=a+b; else if(op=='-') result=a-b; return result; } int main() { int len=0,i=0; int number=0; char enter[100]; cin>>enter; while(enter[i]!='\0') { if(enter[i]>='0' && enter[i]<='9') { if (enter[i+1]>='0' && enter[i+1]<='9') number=10*number+enter[i]-'0'; else { s[len].index=1; s[len].a=10*number+enter[i]-'0'; s[len].b='0'; len++; number=0; } } else { s[len].index=0; s[len].a=0; s[len].b=enter[i]; len++; } i++; } /*for (i=0;i<len;i++) { if (s[i].index) cout<<s[i].index<<" "<<s[i].a<<endl; else cout<<s[i].index<<" "<<s[i].b<<endl; }*/ int s1[100],top1=0,top2=0; char s2[100]; s2[top2]='(';top2++; for(i=0;i<len;i++) { if (s[i].b=='=') { while(top1!=0) { int m=s1[top1-1]; top1--; int n=s1[top1-1]; top1--; char op=s2[top2-1]; top2--; int result=oper(n,m,op); s1[top1]=result; top1++; } } if(s[i].index==1) { s1[top1]=s[i].a; top1++; } else { if (comp1(s[i].b,s2[top2-1])==1) { s2[top2]=s[i].b; top2++; } else { while(comp2(s[i].b,s2[top2-1])==0) { int m=s1[top1-1]; top1--; int n=s1[top1-1]; top1--; char op=s2[top2-1]; top2--; int result=oper(n,m,op); s1[top1]=result; top1++; } } } } //cout<<s1[0]<<endl; /*char a,b; while(cin>>a>>b) { cout<<comp1(a,b)<<" "<<comp2(a,b)<<endl; } */ }

评论