输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
#define STACKINCREMENT 10
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
void InitStack(SqStack &s){
//构造空栈
s.base=(char *)malloc(MAX *sizeof(char));
if(!s.base)exit(0);
s.top=s.base;
s.stacksize=MAX;
}
void Push(SqStack &s,int e){
if(s.top-s.base>=s.stacksize){
s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
if(!s.base)exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
}
void Pop(SqStack &s,int &e){
if(s.top==s.base)
exit(0);
e=*--s.top;
}
int stackEmpty(SqStack s)
{
if(s.top==s.base)
return 1;
return 0;
}
int AllBracket(char*str)
{
SqStack s;
char *p;
int ch;
InitStack(s);
p=str;
while(*p!='\0'){
if(*p=='('||*p=='['||*p=='{')
Push(s,*p);
else if(*p==')'||*p==']'||*p=='}'){
if(stackEmpty(s)){
printf("不匹配\n");
return 0;
}
Pop(s,ch);
if(*p==')'&&ch!='('){
printf("不匹配\n");
return 0;
}
if(*p==']'&&ch!='['){
printf("不匹配\n");
return 0;}
if(*p=='}'&&ch!='{'){
printf("不匹配\n");
return 0;
}
}
p++;
}
if(stackEmpty(s)){
printf("匹配\n");
return 1;
}
return 0;
}
int main(){
char str[80];
printf("请输入表达式:");
gets(str);
AllBracket(str);
return 0;
}