在c++中使用栈求简单表达式(56-20)除(4+2)的值。给我一个完整代码
时间: 2024-09-30 16:05:17 浏览: 28
在C++中,你可以使用栈数据结构以及一些基本的数学运算来计算这种简单的表达式的值。首先,你需要创建一个递归函数来处理括号内的加减法,然后再逐个处理乘除操作。这里是一个简单的示例代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
// 用于存储操作数
int num;
// 存储操作符
char op;
// 函数来处理表达式中的数字
void evalNum(stack<int>& s) {
int val = num;
s.push(val);
}
// 函数来处理操作符
void evalOp(stack<int>& s) {
int b = s.top(); s.pop();
int a = s.top(); s.pop();
switch (op) {
case '+':
s.push(a + b);
break;
case '-':
s.push(a - b);
break;
case '*':
s.push(a * b);
break;
case '/':
if (b != 0)
s.push(a / b);
else
cout << "Error: Division by zero" << endl; // 处理除零错误
break;
default:
cout << "Invalid operator" << endl; // 非法操作符处理
}
}
// 主函数
int evaluate(string exp) {
stack<char> ops;
stack<int> nums;
num = 0;
for (int i = 0; i < exp.length(); i++) {
if (isdigit(exp[i])) {
while (i < exp.length() && isdigit(exp[i]))
num = num * 10 + (exp[i++] - '0');
evalNum(nums); // 输入数字并存储到栈中
} else {
if (exp[i] == '(') { // 如果遇到左括号,将其压入操作符栈
ops.push(exp[i]);
} else if (exp[i] == ')') { // 如果遇到右括号,处理括号内的表达式
while (!ops.empty() && ops.top() != '(')
evalOp(nums); // 从内到外处理操作符
if (!ops.empty())
ops.pop(); // 移除左括号
} else { // 遇到操作符,先处理栈顶的操作符
while (!ops.empty() && precedence(op) <= precedence(ops.top()))
evalOp(nums);
ops.push(exp[i]); // 将当前操作符压入栈中
}
}
}
// 处理剩余的操作符
while (!ops.empty())
evalOp(nums);
return nums.top(); // 返回最终结果
}
// 操作符的优先级
int precedence(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
int main() {
string expression = "(56 - 20) / (4 + 2)";
cout << "Result of the expression is: " << evaluate(expression) << endl;
return 0;
}
```
这个程序会计算给定的表达式的值。注意,这个版本假设输入的表达式没有语法错误,例如,所有的括号都已匹配,没有除以零的情况等。
阅读全文