stack怎么括号匹配利用stl模板库
时间: 2023-03-16 08:45:08 浏览: 158
stack实现括号匹配
可以使用STL模板库中的stack数据结构来实现括号匹配。
具体实现方法如下:
1. 遍历字符串中的每个字符。
2. 如果当前字符是左括号(如'('、'{'、'['等),则将其压入栈中。
3. 如果当前字符是右括号(如')'、'}'、']'等),则弹出栈顶元素,判断是否与当前右括号匹配。如果匹配,则继续遍历下一个字符;如果不匹配,则说明括号不匹配,返回false。
4. 如果遍历完字符串后,栈为空,则说明括号匹配;否则,说明括号不匹配,返回false。
下面是一个示例代码:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isMatched(string str) {
stack<char> s;
for (int i = ; i < str.length(); i++) {
char c = str[i];
if (c == '(' || c == '{' || c == '[') {
s.push(c);
} else if (c == ')' || c == '}' || c == ']') {
if (s.empty()) {
return false;
}
char top = s.top();
s.pop();
if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
return false;
}
}
}
return s.empty();
}
int main() {
string str = "{[()]}";
if (isMatched(str)) {
cout << "括号匹配" << endl;
} else {
cout << "括号不匹配" << endl;
}
return ;
}
```
在上面的代码中,我们使用了STL模板库中的stack数据结构来实现括号匹配。具体来说,我们定义了一个名为s的stack<char>类型的栈,用于存储左括号。在遍历字符串时,如果遇到左括号,则将其压入栈中;如果遇到右括号,则弹出栈顶元素,判断是否与当前右括号匹配。如果匹配,则继续遍历下一个字符;如果不匹配,则说明括号不匹配,返回false。最后,如果遍历完字符串后,栈为空,则说明括号匹配;否则,说明括号不匹配,返回false。
阅读全文