关于括号匹配的问题我在c-free下运行,0处错误,0处警告
可是什么都不输了.正常的结果应该是匹配成功输出true
#define STACKINITSIZE 100
#define STACKINCREMENT 10
#include "string.h"
#include "stdio.h"
#include "malloc.h"
typedef struct
{char *base;
char *top;
int stacksize;
}sqstack;
initstack(sqstack s)
{s.base=(char *)malloc(STACKINITSIZE*sizeof(sqstack));
if(!s.base)
{ printf("overflow\n");
return; }
s.top=s.base;
s.stacksize=STACKINITSIZE;
return;
}
push(sqstack s,char e)
{s.stacksize=STACKINITSIZE;
if(s.top-s.base>=s.stacksize)
{s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(sqstack));
if(!s.base)
{printf("overflow\n");
return;}
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*(s.top)=e;
s.top=s.top+1;
}
char pop(sqstack s)
{char e;
if(s.top==s.base)
{printf("error\n");
return; }
e=*(s.top-1);
return(e) ;
}
int StackEmpty(sqstack s)
{ if(s.base==s.top)
return(1);
else
return(0);
}
int check( )
{
sqstack S;
int n=0;
char ch;
initstack(S);
while ((ch=getchar())!='\n')
{
switch (ch)
{
case ('('): push(S,ch);
case ('['): push(S,ch);
case ('{'): push(S,ch);
case (')'): n=StackEmpty(S) ;
if (n==1) return(0);
else
{ ch=pop(S);
if (ch!='(') return(0);
}
break;
case (']'): n=StackEmpty(S) ;
if (n==1) return(0);
else
{ ch=pop(S);
if (ch!='[') return(0);
}
break;
case ('}'): n=StackEmpty(S) ;
if (n==1) return(0);
else
{ ch=pop(S);
if (ch!='{') return(0);
}
break;
default:break;
}
}
n=StackEmpty(S) ;
if (n==1) return(1);
else return(0);
}
main()
{int m;
m=check();
if(m==0)
printf("false\n");
if(m==1)
printf("ture\n");
getch();
}
[此贴子已经被作者于2007-11-19 13:56:14编辑过]