用栈计算多项式
拿到的代码是定义了一个int栈,一个char栈,想试着只用一个char栈做出来
代码:
//定义一个字符栈
typedef struct
{
char elem[Stack_Size];
int top;
}seqstack;
//栈的初始化
seqstack *initStack()
{
seqstack *s;
s = (seqstack*)malloc(sizeof(seqstack));
s->top = -1;
return s;
}
int push(seqstack *S,char x)
{
if(S->top==Stack_Size-1)
return 0;
S->top++;
S->elem[S->top]=x;
return 1;
}
int pop(seqstack *S,char *x)
{
if(S->top==-1)
return 0;
else
{
*x = S->elem[S->top];
S->top--;
return 1;
}
}
char gettop(seqstack *S)
{
if(S->top==-1)
return '#';
else
{
return (S->elem[S->top]);
}
}
char compare(char a,char b)
{
if(a=='+'||a=='-')
if(b=='+'||b=='-'||b==')'||b=='#')
return '>';
else
return'<';
if(a=='*'||a=='/')
if(b=='(')
return '<';
else
return '>';
if(a=='(')
if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')
return '<';
else if(b==')')
return '=';
if((a==')')&&(b!='('))
return '>';
if(a=='#'&&b!=')')
if(b=='=')
return '=';
else
return '<';
}
int Op(int m,int n,char op)
{
if(op=='+')
return m+n;
if(op=='-')
return n-m;
if(op=='*')
return m*n;
if(op=='/')
return m/n;
}
void Exp(char *s,int *l)
{
seqstack *OPRD = initStack();//数字栈
seqstack *OPTR = initStack();//符号栈
char ch,x,op;
int M,N;
int c,data,val,i = 0;
char m,n;
push(OPTR,'#');
c = strlen(s);
while(i<c)
{
ch = s[i];
if(ch>='0'&&ch<='9')
{
data = s[i]-'0';
++i;
while(s[i] >= '0'&&s[i]<='9')
{
data = data*10+s[i]-'0';
++i;
}
ch = s[i];
push(OPRD,data);
}
else
{
switch(compare(gettop(OPTR),ch))
{
case '<':push(OPTR,ch);
ch = s[++i];break;
case '=':pop(OPTR,&x);
ch = s[++i];break;
case '>':
pop(OPTR,&op);
pop(OPRD,&m);
M=m-'0';
pop(OPRD,&n);
N=n-'0';
val = Op(M,N,op);
push(OPRD,val);
break;
}
}
}
val = gettop(OPRD);
*l = val;
}
int main()
{
char s[MAXLEN];
int l;
cout<<"写一个带有“+”、“-”、“*”、“/”、“)”、“(”等符号的复杂式子,并于式子末尾加上“#”:"<<endl;
gets(s);
Exp(s,&l);
cout<<"答案是:"<<l<<endl;
system("pause");
return 0;
}
因为都是char栈,所以取数字栈栈顶的时候做了一步转换。程序没有报错,但是计算1+1时结果变为-94,1*1结果为-95,想问这个程序哪里出了问题