首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

用栈求后缀表达式,如何都发现不了的异常!

2012-02-06 
用栈求后缀表达式,怎么都发现不了的错误!!!求助!!!我的目标是用栈求后缀表达式,比如:输入一个原表达式a+b*

用栈求后缀表达式,怎么都发现不了的错误!!!求助!!!
我的目标是用栈求后缀表达式,比如:输入一个原表达式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后面不能有";"的

热点排行