//括号匹配
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef struct{
char *elem;
int top; //栈顶指针
}SeqStack;
void Init_SeqStack(SeqStack *s)
{
s->elem = (char*)malloc(sizeof(char)*MAXSIZE);
s->top = -1;
}
int Empty_SeqStack(SeqStack *s)
{
if (s->top == -1){
return 0;
}
return 1;
}
int Push_SeqStack(SeqStack *s,char c)
{
if (s->top == MAXSIZE){
return -1;
}
s->elem[++s->top] = c;
return 1;
}
int Pop_SeqStack(SeqStack *s,char *c)
{
if (s->top==-1){
*c = '#';
return -1;
}
*c = s->elem[s->top];
s->top = s->top-1;
}
main()
{
SeqStack s;
int i=0,flag=0;
char c,ch[100];
Init_SeqStack(&s);
printf("输入括号");
scanf("%s",ch);
while (ch[i]!='\0')
{
switch(ch[i])
{
case '[':
case '(':
case '{':
Push_SeqStack(&s,ch[i]);
break;
case ']':
Pop_SeqStack(&s, &c);
if (c != '['){
flag = 1;
}
break;
case ')':
Pop_SeqStack(&s, &c);
if (c != '('){
flag = 1;
}
break;
case '}':
Pop_SeqStack(&s , &c);
if (c != '{'){
flag = 1;
}
break;
}
if (flag){
printf("匹配失败");
break;
}
i++;
}
if(flag==0)
{
if (Empty_SeqStack(&s)==0)
{
printf("匹配成功");
}
else
printf("匹配失败");
}
}