判断一个算术表达式中开括号和闭括号是否配对。
时间: 2024-05-05 22:16:17 浏览: 83
使用栈来判断算术表达式中开括号和闭括号是否配对。遍历表达式,当遇到开括号时,将其压入栈中;当遇到闭括号时,判断栈顶元素是否为对应的开括号,如果是,则将栈顶元素弹出,继续遍历;如果不是,则说明括号不匹配,算术表达式不合法。最后,如果栈为空,则说明所有括号都匹配,否则说明存在括号未匹配。以下是示例代码:
```
bool isParenthesisMatch(string expr) {
stack<char> s;
for (int i = 0; i < expr.length(); i++) {
if (expr[i] == '(' || expr[i] == '[' || expr[i] == '{') {
s.push(expr[i]);
} else if (expr[i] == ')' || expr[i] == ']' || expr[i] == '}') {
if (s.empty()) {
return false;
}
char top = s.top();
s.pop();
if ((top == '(' && expr[i] != ')') || (top == '[' && expr[i] != ']') || (top == '{' && expr[i] != '}')) {
return false;
}
}
}
return s.empty();
}
```
其中,`expr`是待判断的算术表达式,返回值是一个布尔类型,表示括号是否匹配。在遍历表达式时,如果遇到开括号,则将其压入栈中;如果遇到闭括号,则判断栈顶元素是否为对应的开括号。如果不是,则括号不匹配;如果是,则将栈顶元素弹出,继续遍历表达式。最后,如果栈为空,则说明所有括号都匹配,返回`true`;否则,说明存在括号未匹配,返回`false`。
阅读全文