C++的完整代码呢
时间: 2023-07-10 13:15:28 浏览: 63
好的,以下是使用 C++ 实现的代码:
```c++
#include <iostream>
#include <stack>
#include <unordered_map>
#include <vector>
using namespace std;
unordered_map<char, function<int(int, int)>> ops = {
{'+', [](int x, int y) { return x + y; }},
{'-', [](int x, int y) { return x - y; }},
{'*', [](int x, int y) { return x * y; }},
};
int evaluate(const string& expr) {
stack<int> stack;
for (char ch : expr) {
if (isdigit(ch)) {
stack.push(ch - '0');
} else if (ops.count(ch)) {
int b = stack.top();
stack.pop();
int a = stack.top();
stack.pop();
stack.push(ops[ch](a, b));
}
}
return stack.top();
}
vector<int> evaluate_steps(const string& expr) {
vector<int> steps;
stack<int> stack;
for (char ch : expr) {
if (isdigit(ch)) {
int num = ch - '0';
stack.push(num);
steps.push_back(num);
} else if (ops.count(ch)) {
int b = stack.top();
stack.pop();
int a = stack.top();
stack.pop();
int result = ops[ch](a, b);
stack.push(result);
steps.push_back(result);
}
}
return steps;
}
int main() {
string expr;
cin >> expr;
int result = evaluate(expr);
cout << "result: " << result << endl;
vector<int> steps = evaluate_steps(expr);
for (int step : steps) {
cout << step << " ";
}
cout << endl;
return 0;
}
```
这个代码首先定义了一个 `ops` 哈希表,用来存储运算符和对应的运算函数。然后,实现了两个函数 `evaluate` 和 `evaluate_steps` 分别用来计算表达式的值和输出计算过程中的每一步结果。
在 `evaluate` 函数中,我们使用了一个栈来模拟计算过程。遍历表达式中的每个字符,如果当前字符是数字,则将它压入栈中;否则,从栈中弹出两个数字进行运算,并将结果压入栈中。最终,栈中只会剩下一个数字,即为整个表达式的计算结果。
在 `evaluate_steps` 函数中,我们额外使用了一个 `steps` 向量来保存计算过程中的每一步结果。遍历表达式中的每个字符,将数字入栈并将其加入 `steps` 中,将运算符弹出栈并计算结果,将结果入栈并将其加入 `steps` 中。最终,`steps` 中的元素就是计算过程中的所有中间结果。
在主函数中,我们首先读入表达式,然后分别调用 `evaluate` 和 `evaluate_steps` 函数计算结果和输出计算过程中的每一步结果。