#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 char stack[MAX]; int top=-1; void fun( char a[],char b[]) { int i,len,j; len=strlen(a); j=-1; for(i=0;i<len;i++) { switch(a[i]) { case '(':stack[++top]='(';break; case '-': case '+':while(top>=0&&stack[top]!='(') //当遇到"+-"时,到"("前的运算符全部出栈 b[++j]=stack[top--]; stack[++top]=' '; //运算符进栈前先进去一个' ' stack[++top]=a[i]; //运算符进栈 break; case '*': case '/':while(top>=0&&stack[top]!='('&&stack[top]!='+'&&stack[top]!='-') b[++j]=stack[top--]; //当遇到"*/"时,到"( + -"前的运算符全部出栈 stack[++top]=' '; stack[++top]=a[i]; break; case')':while(stack[top]!='(') b[++j]=stack[top--]; top--; break; default: b[++j]=a[i]; if(a[i+1]<'0'||a[i+1]>'9') { b[++j]=' '; } } } while(top>=0) b[++j]=stack[top--]; b[++j]=' '; // for(i=0;i<=j;i++) // printf("%c",b[i]); } int compvalue(char exp[]) { int i,len,sum=0,c; top=-1; int digit[MAX]; len=strlen(exp); for(i=0;i<len;i++) { switch( exp[i] ) { case' ': break; case'+': sum=digit[top]+digit[top-1]; digit[--top]=sum; break; case'-':sum=digit[top-1]-digit[top]; digit[--top]=sum; break; case'*':sum=digit[top]*digit[top-1]; digit[--top]=sum; break; case'/':sum=digit[top-1]/digit[top]; digit[--top]=sum; break; default: c=0; while(exp[i]>='0'&&exp[i]<='9') { c=c*10+exp[i]-'0'; i++; } digit[++top]=c; } } return digit[0]; } int main() { char a[MAX],b[MAX]; scanf("%s",a); fun(a,b); printf("%s ",b); printf("%d ",compvalue(b)); system("pause"); return 0; }