C++实现栈括号匹配
时间: 2024-09-24 20:05:21 浏览: 45
在C++中,实现栈括号匹配算法通常涉及到使用两个栈数据结构,一个用于存储输入的左括号(如'('、'{'、'['),另一个辅助栈用于检查是否所有右括号都有相应的左括号匹配。以下是基本步骤:
1. 定义两个栈`mainStack`和`auxiliaryStack`,初始化为空。
2. 遍历输入字符串,对于每个字符:
- 如果是左括号(如'('、'{'、'['),将其压入`mainStack`。
- 如果是右括号(如')'、'}'、']'):
- 如果`mainStack`不为空且顶部元素是相对应的左括号(例如,如果当前是')',则上一个元素应该是'('),则弹出`mainStack`的顶部元素,并继续遍历下一个字符。
- 否则,表示找到了不匹配的括号,返回false(表示不匹配)。
3. 当遍历完输入字符串后,如果没有遇到不匹配的情况,`mainStack`应该为空,因为所有的左括号都已配对。此时返回true,表示括号匹配成功。
```cpp
#include <stack>
#include <string>
bool isParenthesesMatched(const std::string& str) {
std::stack<char> mainStack;
for (char c : str) {
if (c == '(' || c == '{' || c == '[') {
mainStack.push(c);
} else if (c == ')' && !mainStack.empty() && mainStack.top() == '(') {
mainStack.pop();
} else if (c == '}' && !mainStack.empty() && mainStack.top() == '{') {
mainStack.pop();
} else if (c == ']' && !mainStack.empty() && mainStack.top() == '[') {
mainStack.pop();
} else {
return false; // 不匹配的括号
}
}
return mainStack.empty(); // 检查剩余的左括号是否都已匹配
}
```
阅读全文