基本思想,将括号压入一个栈当中,若是左括号,则入栈,若是右括号,则出栈一个元素,看其是否匹配,若不匹配则匹配失败。
数据结构
typedef struct{
char data[MaxSize];
int top;
}SqStack;
void push(SqStack &s; char e)
{
if(s.top==MaxSize) return 0;
s.data[++s.top]=e;
}
char pop(SqStack &s; char &e)
{
if(s.top==-1) return 0;
e=s.data[s.top--];
return e;
}
bool MatchBr(char *str)
{
SqStack s;
char c;
int =0;
while(str[i]!='\0')
{
switch(str[i])
{
case '{':push(s; str[i]);
case '(':push(s; str[i]);
case '[':push(s; str[i]); //左括号入栈
case '}': c=pop(s; e);
if(c!={) return 0;
break;
case ')': c=pop(s; e);
if(c!=() return 0;
break;
case ']': c=pop(s; e);
if(c!=[) return 0;
break; //右括号弹栈并比较
default: break;
}
}
if(s.top==-1) //switch语句结束后栈空 说明所有匹配完成
return 1;
else return 0; //否则匹配失败
}