使用C++ 判断含()和{}的算术表达式中所含括号是否正确配对,配对返回1,不配对返回0,表达式用#结束。例如: 输入: 1+(2+3)# 输出: 1
时间: 2024-09-29 22:04:09 浏览: 39
在C++中,你可以通过栈数据结构来解决这个括号配对的问题。这里是一个简单的步骤描述:
1. 定义一个栈,用于存储遇到的左括号('(', '{', '[')。
2. 遍历输入的字符串,对于每个字符:
- 如果是数字或运算符,直接跳过。
- 如果是左括号,将其压入栈中。
- 如果是右括号:
- 如果栈为空,说明没有对应的左括号,返回0表示不匹配。
- 否则,将栈顶元素弹出,检查它是否与当前右括号配对(如'('对应')','{'对应'}','['对应']')。如果不匹配,立即返回0。
3. 遍历结束后,如果栈非空,意味着还有未配对的左括号,也返回0;否则,返回1表示所有括号都已正确配对。
以下是一个简单的C++函数实现这个算法:
```cpp
#include <stack>
#include <string>
int is_valid_expression(const std::string& expression) {
std::stack<char> brackets;
for (char c : expression) {
if (c >= '0' && c <= '9' || c == '+' || c == '-') // 忽略数字和运算符
continue;
if (c == '(' || c == '{' || c == '[')
brackets.push(c);
else if (!brackets.empty()) { // 遇到右括号
char top = brackets.top();
if ((c == ')' && top != '(') ||
(c == '}' && top != '{') ||
(c == ']' && top != '['))
return 0; // 匹配错误
brackets.pop(); // 成功配对,移除栈顶元素
} else
return 0; // 没有左括号对应,错误
}
return brackets.empty() ? 1 : 0; // 检查栈是否为空
}
```
你可以用这个函数来验证输入的算术表达式括号是否正确。例如:
```cpp
std::cout << is_valid_expression("1+(2+3)#") << std::endl; // 输出:1
```
阅读全文