c++栈的应用检测表达式括号是否匹配
时间: 2024-10-28 12:15:17 浏览: 58
在 C++ 中,栈是一种数据结构,常用于检查表达式中的括号是否匹配。当我们遇到左括号(如 '(', '{', '[')时,会将其压入栈;当遇到右括号(如 ')', '}', ']')时,我们会检查栈顶元素是否与其配对。如果匹配,则弹出栈顶元素;如果不匹配,说明括号不平衡,表达式无效。
以下是简单的步骤:
1. 初始化一个空栈。
2. 遍历输入表达式的字符,对于每个字符:
- 如果是左括号,直接压入栈。
- 如果是右括号,检查栈是否为空。若为空则表示括号未配对,返回 false。
- 若不为空,弹出栈顶的左括号并与当前右括号比较,若是配对的,则继续,否则返回 false。
3. 遍历结束后,如果栈非空,意味着还有剩余的左括号未找到右括号,返回 false。否则,所有括号都已配对,返回 true。
```cpp
#include <stack>
bool isParenthesesMatched(const std::string& expression) {
std::stack<char> stack;
for (char ch : expression) {
if (ch == '(' || ch == '{' || ch == '[') {
stack.push(ch);
} else if (ch == ')' && !stack.empty() && stack.top() == '(') {
stack.pop();
} else if (ch == '}' && !stack.empty() && stack.top() == '{') {
stack.pop();
} else if (ch == ']' && !stack.empty() && stack.top() == '[') {
stack.pop();
} else {
return false; // 非括号字符错误位置
}
}
return stack.empty(); // 检查是否所有的左括号都有对应的右括号
}
```
阅读全文