#include "stack.h"
bool Legal(char a[])
{
SqStack s1;
SElemType e;
InitStack(&s1);
int i=0;
while(a[i]!='\0')
{
switch(a[i])
{
case '(':
case '[':
case '{':
Push(&s1,a[i]);
break;
case ')':
if(StackEmpty(&s1))
return false;
else
{
GetTop(&s1,&e);
if(e=='(')
Pop(&s1,&e);
else
return false;
}
break;
case ']':
if(StackEmpty(&s1))
return false;
else
{
GetTop(&s1,&e);
if(e=='[')
Pop(&s1,&e);
else
return false;
}
break;
case '}':
if(StackEmpty(&s1))
return false;
else
{
GetTop(&s1,&e);
if(e=='{')
Pop(&s1,&e);
else
return false;
}
break;
}
i++;
};
if(StackEmpty(&s1))
return true;
else return false;
}
void main()
{
char a[50];
bool b;
char yn;
char lan;
cout<<"Select the language: | 请选择语言:"<<endl;
cout<<"Chinese(C) | English(E) | 汉语(C) | 英语(E)"<<endl;
cin>>lan;
switch(lan)
{
case 'c':
case 'C':
cout<<"\t\t\t括号匹配"<<endl;
label: cout<<"请输入表达式:";
cin>>a;
b=Legal(a);
if(!b)
cout<<"括号匹配错误"<<endl;
else
cout<<"括号匹配正确"<<endl;
cout<<"是否继续?(Y/N):";cin>>yn;
if(yn=='Y'||yn=='y')
goto label;
break;
case 'e':
case 'E':
cout<<"\t\t\tmatching parentheses"<<endl;
label1: cout<<"Please input a expression:";
cin>>a;
b=Legal(a);
if(!b)
cout<<"wrong"<<endl;
else
cout<<"right"<<endl;
cout<<"continue?(Y/N):";cin>>yn;
if(yn=='Y'||yn=='y')
goto label1;
}
}