题目:假设表达式中允许包含三种括号:圆括号、方括号、花括号,其嵌套的顺序随意。
例题如下:
char a[] = "(())abc{[(])}"; // 左右括号次序匹配不正确
char b[] = "(()))abc{[]}"; // 右括号多于左括号
char c[] = "(()()abc{[]}"; // 左括号多于右括号
char d[] = "(())abc{[]()}"; // 左右括号匹配正确
分析过程(就按({} [])来分析):
当计算机接受了第一个“(”括号后,它期待与之相匹配的“)”括号出现,结果等来的是“{”括号,此时第一个括号“(”只能靠边,而迫切等待与第二个括号相匹配的“}”出现,但等到了“[”,这时最迫切的等待匹配的就成了“]”。在第三个括号等到他匹配的之后,就会让位与第二个括号,……,以此类推,可见这个处理过程恰好与栈的特点相吻合。
So,在算法中设置一个栈,,每读入一个括号,若是右括号,则将栈顶的括号pop弹出与之匹配。要不是则继续push压栈。另外,在算法的开始和结束时,栈都应该是空的。
下面我们来看一下具体代码: