#define Stack_Size 50
#define TRUE 1
#define FALSE 0
#include<stdio.h>
typedef char StackElementType;
typedef struct{
StackElementType elem[Stack_Size];
int top;
}SeqStack;
void InitStack(SeqStack *s){
s->top=-1;
}
int Push(SeqStack *s,StackElementType x){
if(s->top==Stack_Size-1)
return(FALSE);
s->top++;
s->elem[s->top]=x;
return(TRUE);
}
int Pop(SeqStack *s,StackElementType *x){
if(s->top==-1)
return(FALSE);
else
{
*x=s->elem[s->top];
s->top--;
return(TRUE);
}
}
int GetTop(SeqStack *s,StackElementType *x){
if(s->top==-1)
return(FALSE);
else
{
*x=s->elem[s->top];
return(TRUE);
}
}
int IsEmpty(SeqStack *S){
return(S->top==-1?TRUE:FALSE);
}
/*进行匹配*/
int Match(char ch,char str)
{
if(ch=='(' && str==')')
{
return TRUE;
}
else if(ch=='[' && str==']')
{
return TRUE;
}
else if(ch=='{' && str=='}')
{
return TRUE;
}
else
return FALSE;
}
void BracketMatch(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[100];
printf("please input:");
gets(str);
BracketMatch(str);
return (TRUE);
}