我也写了一个把所有的括号都考虑一下
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define INIT_SIZE 100
#define INCREMENT 10
#define error 0
typedef struct
{
char *top;
char *base;
int stacksize;
}SqStack;
void InitStack(SqStack &S);
void PushStack(SqStack &S, char e);
int PopStack(SqStack &S, char &e);
int Find( char ch,SqStack S);
void InitStack(SqStack &S)
{
S.base=(char*)malloc(sizeof(char)*INIT_SIZE);
if(!S.base) exit(1);
S.top=S.base;
S.stacksize=INIT_SIZE;
}
void PushStack(SqStack &S, char e)
{
if(S.top-S.stacksize==0)
{
S.base=(char*)realloc(S.base, sizeof(char)*(INIT_SIZE+INCREMENT));
S.top=S.base+INCREMENT;
S.stacksize+=INCREMENT;
}
*S.top++=e;
}
int PopStack(SqStack &S, char &e)
{
if(S.base==S.top) return error;
e=*(--S.top);
return 1;
}
int Find( char ch,SqStack S)/*看是不是相匹配*/
{
if(S.base==S.top) return 1;
else
if(ch==')'&& *(S.top-1)=='('||ch==']'&&*(S.top-1)=='['||ch=='}'&&*(S.top-1)=='{')
return 0;
else return 1;
}
int main()
{
char ch,e;
int m;
SqStack S;
InitStack(S);
ch=getchar();
while(ch!=' ')
{
if(m=Find(ch,S))
{
PushStack(S,ch);
ch=getchar();
}
else
{
PopStack(S, e);
ch=getchar();
}
}
if(S.base==S.top)
printf("是匹配的.\n");
else
printf("\aNOt!");
return 0;
}
明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生