只要输出 )] 这两个括号右边结果一定是匹配失败
#include<stdio.h>#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct {
char aa;
}ch;
typedef struct sq{
struct sq *next;
ch ch1;
}sq;
sq *InitStack(sq *le){
le=NULL;
return le;
}
sq *Push(sq *le,ch *cha){
sq *le1;
le1=(sq *)malloc(sizeof(sq));
if(le1==NULL){
printf("增加节点失败了");
exit(1);
}
//*le1->ch1=*cha;
le1->next=le;
le1->ch1=*cha;
le=le1;
return le;
}
sq *Pop(sq *le,ch *cha){
if(NULL==le){
printf("站空了,不能出站");
exit(1);
}
sq *le1;
le1=le;
*cha=le->ch1;
le=le->next;
free(le1);
return le;
}
ch GetHead(sq *le){
if(le==NULL){
printf("站为空,不能取站定元素");
exit(1);
}
return le->ch1;
}
int StackEmpty(sq *le){
if(NULL==le)
return TRUE;
else
return FALSE;
}
int main(){
sq *le;
int chr;
int flag=1;
ch *cha;
le=InitStack(le);
while('#'!=(chr=getchar()) && flag){
//if('#'!=(chr=getchar()) && flag){
switch(chr){
case '[':
case '(':
cha=(ch *)malloc(sizeof(ch));//需要申请地址空间用于储存内容
if(NULL==cha){
printf("申请空间地址为空");
exit(1);
}
cha->aa=chr;
le=Push(le,cha);
free(cha);
break;
case ')':
if(!StackEmpty(le)&&')'==GetHead(le).aa){//
le=Pop(le,cha);
printf("%c ",cha->aa);//
}
else
flag=0;
break;
case ']':
if(!StackEmpty(le)&&']'==GetHead(le).aa){
cha=(ch *)malloc(sizeof(ch));//需要申请地址空间用于储存内容
if(NULL==cha){ //
printf("申请空间地址为空");
exit(1);
}
le=Pop(le,cha);
printf("%c ",cha->aa);
free(cha);
}
else
flag=0;
break;
}
//}
}
if(!StackEmpty(le) && flag)
printf("匹配成功");
else
printf("匹配失败");
}