C语言数据结构:后缀表达式求值

以下是我编写的完整代码,可是求的后缀表达式12+结果不是3,而是39,测试其它后缀表达式也是39,不知道是不是程序哪地方出了问题,请懂得帮忙看看,麻烦了!!

#include<stdio.h>
#include"malloc.h"
#include<string.h>
#define MAX 50
//定义顺序栈的结构体
typedef struct
{
int data[MAX];
int top;
}SqStack;
//定义初始化栈
void initSqStack(SqStack &sqt)
{
sqt.top=-1;
}
//定义运算函数
int op(int a,char op,int b)
{
if(op=='+')
{
return a+b;
}
if(op=='-')
{
return a-b;
}
if(op=='*')
{
return a*b;
}
if(op=='/')
{
if(b==0)
{
return 0;
}
else{
return a/b;
}
}
}
//定义后缀式求值的方法
int com(SqStack &sqt ,char exp[])
{
int i,a,b,c;
char opra;
for(i=0;exp[i]!='\0';i++)
{
if(exp[i]>='0'&&exp[i]<='9')
{
sqt.data[++sqt.top]=exp[i]-'0';
}
else
{
opra=exp[i];
b=sqt.data[sqt.top--];
a=sqt.data[sqt.top--];
c= op(a,opra, b);
sqt.data[++sqt.top]=c;
}
}
return sqt.data[sqt.top];
}
void main()
{
SqStack sqt;
initSqStack(sqt);
char a[10]="11+'\0'";
int x;
x=com(sqt ,a);
printf("%d",x);
}
不好意思,题目要求以'扫描到 ‘\0'作为终止符

第1个回答  2012-07-25
char a[10]="11+'\0'";
写错了
char a[10] = "11+";//字符串自动以'\0'结束
如果想强制加个\0

char a[10]="11+\0";//没有单引号

int op(int a,char op,int b)不妨用switch,不要那么多if本回答被网友采纳
第2个回答  2012-07-25
char a[10] = "11+";//字符串自动以'\0'结束追问

请问我的那个错误结果是如何运算出来得到的39?另外请问如果我就是想强制以像"11+'\0'"这里边那样的'\0'结束,那请问 for(i=0;exp[i]!='\0';i++)这地方该怎么写哪?

追答

"11+'\0'"这个其实最后读取到的第一个单分号。
而\0依旧作为结束符。
如果真的要存储\0,那便是两个字符,循环以\作为结束
"11+\\0"字符如左,要有双斜杆,第一个斜杆做转义用

本回答被提问者采纳
相似回答