用的DEV C++,运行出的答案是错误的,答案中有乱码
#include<iostream>
#include <stdlib.h>
using namespace std;
typedef int SElemType;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &s){
s.base=new SElemType(STACK_INIT_SIZE);
if(!s.base) exit(0);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}
int Push(SqStack &s,SElemType e){
if(s.top-s.base==s.stacksize)
return 0;
*s.top++=e;
return 1;
}
int Pop(SqStack &s,SElemType &e){
if(s.top==s.base)
return 0;
e=*--s.top;
return 1;
}
SElemType GetTop(SqStack s){
if(s.top!=s.base)
return *(s.top-1);
else
return 0;
}
SElemType Precede(SElemType t1,SElemType t2){
SElemType f;
switch(t2)
{
case '+':
case '-':
if(t1=='('||t1=='#')
f='<';
else
f='>';
break;
case '*':
case '/':
if(t1=='*'||t1=='/'||t1==')')
f='>';
else
f='<';
break;
case '(':
if(t1==')')
{
printf("ERROR1\n");
exit(0);
}
else
f='<';
break;
case ')':
switch(t1)
{
case '(':
f='=';
break;
case '#':
printf("ERROR2\n");
exit(0);
default:
f='>';
}
break;
case '#':
switch(t1)
{
case '#':
f='=';
break;
case '(':
printf("ERROR3\n");
exit(0);
default:
f='>';
}
}
return f;
}
int In(SElemType c){
switch(c){
case'+':return true;
case'-':return true;
case'*':return true;
case'/':return true;
case'(':return true;
case')':return true;
case'#':return true;
default:return false;
}
}
SElemType Operate(SElemType a,SElemType theta,SElemType b){
SElemType c;
a=a-48;
b=b-48;
switch(theta){
case'+':c=a+b+48;
case'-':
c=a-b+48;
break;
case'*':
c=a*b+48;
break;
case'/':c=a/b+48;
}
return c;
}
char EValuateExpress(){
SqStack OPTR,OPND;
SElemType a,b,c,ch,theta;
InitStack(OPND);
InitStack(OPTR);
Push(OPTR,'#');
cin>>ch;
cout<<ch;
while(c!='#'||GetTop(OPTR)!='#'){
if(!In(c))
{
Push(OPND,ch);
cin>>ch;
}
else
switch(Precede(GetTop(OPTR),ch)){
case'<':
Push(OPTR,ch);
cin>>ch;
break;
case'>':
Pop(OPTR,theta);
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
case'=':
Pop(OPTR,ch);
cin>>ch;
break;
}
return GetTop(OPND);
}
}
int main(){
cout<<"请输入算术表达式,并以#结束"<<endl;
cout<<EValuateExpress()<<endl;
}