#include<stdio.h>
#include<stdlib.h>
#define N 20
#define SIZE 20
#define MORE 10
typedef struct{
char *base;
int top;
int stacksize;
}SqStack;
void InitStack(SqStack &S){
//构造一个空栈
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}
int StackEmpty(SqStack &S){
//判空 是返回1 否返回0
if(S.top==0) return 1;
else return 0;
}
void Push(SqStack &S,char e){
//入栈
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+MORE)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=MORE;
}
S.base[S.top++]=e;
}
void Pop(SqStack &S,char &e){
//出栈
if(S.top==0) exit(0);
else
e=S.base[--S.top];
}
int AllBrackets_Test(char *str) {
//判别给定的表达式中三种括号是否匹配
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p!='\0';p++){
if(*p=='(' || *p=='[' || *p=='{')
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0;
}
}
if(!StackEmpty(S)) return 0;
else
printf("匹配!");
}
int main(){
char a[N];
printf("输入一个表达式:\n");
gets(a);
AllBrackets_Test(a);
return 0;
})
#include<stdlib.h>
#define N 20
#define SIZE 20
#define MORE 10
typedef struct{
char *base;
int top;
int stacksize;
}SqStack;
void InitStack(SqStack &S){
//构造一个空栈
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}
int StackEmpty(SqStack &S){
//判空 是返回1 否返回0
if(S.top==0) return 1;
else return 0;
}
void Push(SqStack &S,char e){
//入栈
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+MORE)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=MORE;
}
S.base[S.top++]=e;
}
void Pop(SqStack &S,char &e){
//出栈
if(S.top==0) exit(0);
else
e=S.base[--S.top];
}
int AllBrackets_Test(char *str) {
//判别给定的表达式中三种括号是否匹配
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p!='\0';p++){
if(*p=='(' || *p=='[' || *p=='{')
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0;
}
}
if(!StackEmpty(S)) return 0;
else
printf("匹配!");
}
int main(){
char a[N];
printf("输入一个表达式:\n");
gets(a);
AllBrackets_Test(a);
return 0;
})