用栈求后缀表达式,怎么都发现不了的错误!!!求助!!!
我的目标是用栈求后缀表达式,比如:输入一个原表达式a+b*c#,运行后得后缀表达式abc*+#。
别被这么长的代码吓倒!呵呵!只要看我注释的几行就可以了,我怎么都认识不到哪儿错了!!!
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack;
void InitStack(SqStack &S)
{
S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
/*error C2143:syntax error:missing')'before';'
error C2059:syntax error:')'
error C2100:illegal indirection这三个错误全是上面这个语句的!!!*/
if(!S.base)exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
void Push(SqStack &S,char e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
/*error C2143:syntax error:missing')'before';'
error C2143:syntax error:missing')'before';'
error C2059:syntax error:')'
error C2059:syntax error:')'
error C2100:illegal indirection以上五个错误都是上一个语句的!!!*/
if(!S.base)exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}
void Pop(SqStack &S,char &e)
{
if(S.top==S.base)exit(0);
e=*--S.top;
}
void GetTop(SqStack S,char &e)
{
if(S.top==S.base)exit(0);
e=*(S.top-1);
}
int StackEmpty(SqStack S)
{
if(S.top==S.base)
return 1;
else
return 0;
}
void transform(char suffix[],char exp[])
{
SqStack S;
InitStack(S);Push(S,'#');char ch,c;int i=0;
char *p=exp;ch=*p;
while(!StackEmpty(S)){
if('0'<=ch<='9'){suffix[i]=ch;i++;}
else{
switch(ch){
case '(':Push(S,ch);break;
case ')':Pop(S,c);
while(c!='(')
{suffix[i]=c;i++;Pop(S,c);}
default:
GetTop(S,c);
while(c&&(c>ch))
{suffix[i]=c;i++;Pop(S,c);}
if(ch!='#')Push(S,ch);
break;
}
if(ch!='#'){p++;ch=*p;}
else{Pop(S,ch);suffix[i]=ch;i++;}
}
}free(S.base);free(S.top);
}
int main(){
char suffix[100],exp[100];
cout<<"input exp:";
cin>>exp;
transform(suffix,exp);
cout<<"output suffix:"<<suffix;
}
[解决办法]
const STACK_INIT_SIZE=100;
const STACKINCREMENT = 10;
if('0'<=ch<='9'){suffix[i]=ch;i++;}这句有这样写的么????你当是数学的表达式
if('0'<=ch && ch<='9'){suffix[i]=ch;i++;}
[解决办法]
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
这是最容易犯的错,这里:#define后面不能有";"的