#include<stdio.h>
#define Stack_Size 50
typedef struct
{
char elem[Stack_Size];
int top;
} SeqStack;
void InitStack(SeqStack *S)//初始栈
{
S->top = -1;
}
bool Push(SeqStack *S,char ch)//进栈
{
if(S->top == Stack_Size-1)
return false;
S->top++;
S->elem[S->top] = ch;
return true;
}
bool pop(SeqStack *S,char* ch)//出栈
{
if(S->top == -1)
return false;
else
{
*ch = S->elem[S->top];
S->top--;
return true;
}
}
bool GetTop(SeqStack *S,char *ch)//取得栈顶元素
{
if(S->top == -1)
return false;
else
{
*ch = S->elem[S->top];
return true;
}
}
bool IsEmpty(SeqStack *S)//判断栈为空
{
if(S->top == -1)
return true;
else
return false;
}
bool Match(char c1,char c2)//比较括号是否匹配
{
if(c1=='(' && c2==')')
return true;
else if(c1=='[' && c2==']')
return true;
else if(c1=='{' && c2=='}')
return true;
else
return false;
}
void BrackMatch(char *str)
{
SeqStack S;
int i;
char ch;
InitStack(&S);//
for( i = 0 ; str[i] != '\0'; i ++ )
{
switch(str[i])
{
case'(':
case'[':
case'{':
Push(&S,str[i]);
break;
case')':
case']':
case'}':
if(IsEmpty(&S))
{
printf("\n右括号多余!");
return;
}
else
{
GetTop(&S,&ch);
if(Match(ch,str[i]))
pop(&S,&ch);
else
{
printf("\n对应的左右括号不同类!");
return;
}
}
}
}
if(IsEmpty(&S))
printf("\n括号匹配!");
else
printf("\n左括号多余!");
}
int main()
{
char str[Stack_Size];
scanf("%s",&str);
BrackMatch(str);
return 0;
}