使用c++写出以下代码 判断含()和{}的算术表达式中所含括号是否正确配对,配对返回1,不配对返回0,表达式用#结束。例如: 输入: 1+(2+3)# 输出: 1
时间: 2024-09-29 11:06:57 浏览: 25
设计一个算法判别一个算术表达式的圆括号是否正确配对
这个C++代码片段是用来判断一个由数字和加法运算符以及圆括号组成的算术表达式中括号是否正确配对的。它使用了栈数据结构来完成这个任务。当你看到一个左括号(如'('、'{'或'['),就把它推入栈中。每当遇到一个右括号时(如')'、'}'或']'),会检查栈顶的左括号是否与之匹配。如果匹配,就将栈顶的左括号弹出;如果不匹配,说明括号不配对,返回0。遍历结束后,如果栈为空,所有括号都正确配对,返回1;否则,返回0。
下面是完整的代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
bool isValidExpression(string expression) {
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 false; // 匹配错误
brackets.pop(); // 成功配对,移除栈顶元素
} else
return false; // 没有左括号对应,错误
}
return brackets.empty(); // 如果栈为空,表示所有括号配对
}
int main() {
string input = "1+(2+3)#";
cout << isValidExpression(input) << endl; // 输出:1
return 0;
}
```
当运行上面的`isValidExpression`函数,它会输出1,表明提供的表达式"1+(2+3)#"中的括号配对正确。
阅读全文