用+ - × /() 和 0 1 2 3 4 5 6 7 8 9 组成像这样的表达式:
8-6/2-3×4+(1+9)/2 然后编程求值,要求能运算任何表达式的值
栈的代码没有错,以下是主要的代码,出了问题,运行没有结果,请帮我指出错误的地方,谢谢啦~
int In(char c)
{ if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')')
return 1;
else return 0;
}
char Precede(char a,char c){
char x;
char s[7][7];
int i,j;
s[0][0]=s[0][1]=s[0][5]=s[0][6]=s[1][0]=s[1][1]=s[1][5]=s[1][6]=s[2][0]=s[2][1]=s[2][2]=s[2][3]=s[2][5]=s[2][6]=s[3][0]=s[3][1]=s[3][2]=s[3][3]=s[3][5]=s[3][6]='>';
s[0][2]=s[0][3]=s[0][4]=s[1][2]=s[1][3]=s[1][4]=s[2][4]=s[3][4]='<';
for(i=0;i<7;i++)
{s[4][i]='<';s[5][i]='>';s[6][i]='<';}
s[4][5]='=';s[4][6]=0;s[5][4]=0;s[6][5]=0;s[6][6]='=';
if(a=='+') i=0;
if(a=='-') i=1;
if(a=='*') i=2;
if(a=='/') i=3;
if(a=='(') i=4;
if(a==')') i=5;
if(a=='#') i=6;
if(c=='+') j=0;
if(c=='-') j=1;
if(c=='*') j=2;
if(c=='/') j=3;
if(c=='(') j=4;
if(c==')') j=5;
if(c=='#') j=6;
return s[i][j];
}
char Operate(char a,char theta,char b){
int A,B,c;
char C;
A=a-'0';
B=b-'0';
switch(theta){
case'+': c=A+B;break;
case'-': c=A-B;break;
case'*': c=A*B;break;
case'/': c=A/B;break;
}
C=c+'0';
return C;
}
char EvaluateExpression(){
SqStack OPTR,OPND; char e,x,a,b;char theta;
InitStack(OPTR); Push(OPTR,'#');
InitStack(OPND); char c=getchar();
while(c!='#'||GetTop(OPTR,e)!='#'){
if(!In(c)){Push(OPND,c); c=getchar();}
else
switch(Precede(GetTop(OPTR,e),c)){
case'<': Push(OPTR,c);c=getchar();
break;
case'=': Pop(OPTR,x); c=getchar();
break;
case'>': Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
}
return GetTop(OPND,e);
}
int main()
{ EvaluateExpression();
}