假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写程序来判别表达式中的括号是否配对,以字符“\0”作为算术表达式的结束符用c++写
时间: 2024-11-15 22:21:04 浏览: 27
在 C++ 中,可以使用栈(Stack)数据结构来解决这个问题。栈是一种后进先出(LIFO)的数据结构,非常适合用于检查括号的匹配。以下是简单的步骤:
1. 定义一个栈,通常用 `std::stack<char>` 或其他容器实现,存储遇到的左括号。
2. 遍历输入的字符串(假设为 `expression`),对于每个字符:
- 如果遇到一个左括号(如 '(', '[', '{'),将其压入栈中。
- 如果遇到一个右括号(如 ')', ']', '}'):
- 如果栈不为空,取出栈顶元素,如果它是对应的左括号(例如,')' 对应 '(',']' 对应 '[','}' 对应 '{'),则继续遍历;
- 否则,说明遇到了不匹配的括号,返回 false。
- 如果栈空了,说明找到了一个孤立的右括号,也是不匹配的,返回 false。
- 如果遇到 '\0' 结束符,检查栈是否为空。若为空,则表示所有括号都已配对,返回 true;否则返回 false。
下面是一个简单的示例代码片段:
```cpp
#include <iostream>
#include <stack>
bool isParenthesesMatched(const std::string& expression) {
std::stack<char> stack;
for (char c : expression) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' && !stack.empty() && stack.top() == '(') {
stack.pop();
} else if (c == ']' && !stack.empty() && stack.top() == '[') {
stack.pop();
} else if (c == '}' && !stack.empty() && stack.top() == '{') {
stack.pop();
} else {
return false; // 不匹配的括号
}
}
return stack.empty(); // 检查剩余栈是否为空
}
int main() {
std::string expr = "(({}))[]";
std::cout << (isParenthesesMatched(expr) ? "括号匹配" : "括号不匹配") << '\n';
return 0;
}
```
阅读全文