1.括号匹配的原则
在一个表达式当中存在三种括号:小括号,中括号和大括号。各种括号之间允许嵌套,但是不能存在交叉的情况:
([]{})//正确
([()])//正确
{([])}//正确
{([)]}//不正确
{(}[])//不正确
2.代码实现方法
再检验一个表达式是否正确的情况下,我们借助栈的作用,通过遍历的方法,来实现检验表达式,即(括号匹配)。
在匹配过程中,当遍历到一个元素时:
1:当栈中没有元素,即将该元素插入到栈里面
2:如果该元素是:'(' , '{' , '[' 则直接将其插入到栈中
3:如果是:')' , '}' , ']',我们应该将其与栈顶元素进行匹配,如果是匹配的,将栈顶元素弹出并与该元素一起输出;如果不是匹配的,则匹配错误。
3.代码实现
int Match(char c[])
{
int i = 0;
sequence_stack s;//定义一个栈
init(&s);//置空这个栈
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));//如果栈中还保留元素 说明匹配失败
}