#include<iostream> #include<stdio.h> #include<stack> using namespace std; char Compare(char x,char y) { char c[][8]={">><<<>>", ">><<<>>", ">>>><>>", ">>>><>>", "<<<<<=e", ">>>>e>>", "<<<<<e=" }; int a[100]; a['+']=0;a['-']=1;a['*']=2;a['/']=3;a['(']=4;a[')']=5;a['#']=6; return c[a[x]][a[y]]; } float Execute(float a,char o,float b) { switch(o) { case'+':return a+b; case'-':return a-b; case'*':return a*b; case'/':return a/b; } return 0; } float ExpEvaluation() { char ch,ch1; float a,b,v; stack<float> D; stack<char> R; printf("Please input an expression(Ending with #):\n"); R.push('#'); cin>>ch; //ch=getchar(); while(ch!='#'||R.top()!='#') { if(ch>='0'&&ch<='9') { int temp=ch-'0'; cin>>ch; //ch=getchar(); while(ch>='0'&&ch<='9') { temp=temp*10+ch-'0'; cin>>ch; //ch=getchar(); } D.push(temp); } else { switch(Compare(R.top(),ch)) { case'<':R.push(ch); cin>>ch; //ch=getchar(); break; case'=':R.pop(); cin>>ch; //ch=getchar(); break; case'>':ch1=R.top(); R.pop(); b=D.top(); D.pop(); a=D.top(); D.pop(); v=Execute(a,ch1,b); D.push(v); break; } } } v=D.top(); return v; } int main() { float ans; while(1) { ans=ExpEvaluation(); /*getchar();前面用getchar()插入的的时候最后我们用回车输出结果, 这里的getchar()用于吸收回车,而且用getchar()输入的话多数输空格 或者回车就会报错,这里要吸收回车就是一个例子*/ printf("%.4f\n",ans); } return 0; }