用c++写一段代码实现 使用栈结构,判断一个表达式的括号是否匹配,一共包括三种括号类型:() [] {}
时间: 2024-10-20 14:04:23 浏览: 29
C++表达式括号匹配配对判断问题
为了检查一个包含三种括号类型的表达式(() [] {})的括号是否匹配,你可以使用一个栈数据结构。这里是一个简单的C++代码示例:
```cpp
#include <iostream>
#include <stack>
#include <string>
// 定义括号字符和它们对应的关闭括号
const char* open_brackets = "([{";
const char* close_brackets = ")]}]}";
bool isValid(const std::string& s) {
stack<char> brackets;
for (char c : s) {
if (open_brackets.find(c) != std::string::npos) { // 如果是开放括号
brackets.push(c);
} else if (close_brackets.find(c) != std::string::npos) { // 如果是关闭括号
if (brackets.empty() || close_brackets[close_brackets.find(c)] != brackets.top()) { // 检查是否有对应开启的括号
return false;
}
brackets.pop(); // 如果匹配,移除栈顶的开启括号
}
}
// 如果所有括号都已匹配,且栈为空,则表示括号匹配
return brackets.empty();
}
int main() {
std::string expr1 = "(({}))"; // 测试表达式
std::string expr2 = "{[()]()}"; // 测试表达式
std::string expr3 = "({[})"; // 不匹配的表达式
std::cout << "Expression 1 is valid: " << (isValid(expr1) ? "true" : "false") << '\n';
std::cout << "Expression 2 is valid: " << (isValid(expr2) ? "true" : "false") << '\n';
std::cout << "Expression 3 is valid: " << (isValid(expr3) ? "true" : "false") << '\n';
return 0;
}
```
这段代码定义了一个`isValid`函数,它遍历输入的字符串`s`,将遇到的开放括号压入栈中,如果遇到关闭括号则检查是否与栈顶的开放括号匹配。如果所有括号都能找到相应的匹配对,并且最后栈为空,说明括号匹配。
阅读全文