第4题假设一个算术表达式中可以包含以下三种括号:“(”和“)”、“[”和“]”及和 “}”,并且这三种括号可以按照任意的次序嵌套使用。
下面仅考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式 [a-(b-5)]*c[{}]中的括号是完全匹配的,而表达式[a-(b-5]))*c中的括号不是完全匹配的, 因为“(”与“]”不能匹配,而且多了一个“)”,即缺少一个与“)”相匹配的“(”。
函数ifMatched (char expr[])的功能是用栈来判断表达式中的括号是否匹配,表达式 以字符串的形式存储在字符数组expr中。若表达式中的括号完全匹配,则该函数的返回 值为Matched,否则返回值为Mismatched。
该函数的处理思路如下:
(1) 设置一个初始为空的栈,从左至右扫描表达式。
(2) 若遇上左括号,则令其入栈;若遇上右括号,则需要与栈顶的左括号进行匹配。
(3) 若所遇到的右括号能与栈顶的左括号配对,则令栈顶的左括号出栈' 然后继续匹配过程;否则返回Mismatched,结束判断过程。
(4) 若表达式扫描结束,同时栈变为空,则说明表达式中的括号能完全匹配,返回 Matched o
函数ifMatched中用到了两种用户自定义数据类型BOOL和STACK,其中,BOOL 类型的定义如下:
