#include<stdio.h>
#include<stdlib.h>
#define Max 100
typedef char datetype;
typedef struct{
datetype c[Max];
int top;
}sequence_stack;
void init(sequence_stack* s)
{
s->top=0;
}
int empty(sequence_stack s)
{
return (s.top?0:1);
}
datetype read(sequence_stack s)
{
return s.c[s.top-1];
}
void push(sequence_stack* s,datetype x)
{
if(s->top==Max)
{
printf("The sequence stack is full!\n");
exit(1);
}
s->c[s->top++]=x;
}
void pop(sequence_stack* s)
{
s->top--;
}
int parenthesis_matching(char c[])
{
sequence_stack s;
init(&s);
int i=0;
while(c[i]!='#')
{
switch(c[i])
{
case '{':
case '[':
case '(':
push(&s,c[i]);
break;
case '}':
if(!empty(s)&&read(s)=='{')
{
pop(&s);break;
}
else
return 0;
case ']':
if(!empty(s)&&read(s)=='[')
{
pop(&s);break;
}
else return 0;
case ')':
if(!empty(s)&&read(s)=='(')
{
pop(&s);break;
}
else return 0;
}
i++;
}
return empty(s);
}
int main()
{
char c[Max];
printf("请输入一个想要检验的表达式(以#结尾):\n");
gets(c);
puts(c);
int a=parenthesis_matching(c);
if(a)
{
printf("匹配!\n");
}
else
printf("不匹配!\n");
return 0;
}