用c++实现波兰表达式求值
时间: 2024-03-24 08:16:13 浏览: 137
波兰表达式(又称前缀表达式)是一种不含括号的表达式,可以通过栈来求值。具体步骤如下:
1. 从右至左遍历表达式中的每一个符号。
2. 如果当前符号是操作数,则将其压入栈中。
3. 如果当前符号是运算符,则弹出栈中的两个操作数进行运算,并将结果压入栈中。
4. 重复上述步骤,直到遍历完整个表达式。
5. 最后栈中仅剩一个元素,即为表达式的值。
以下是一份简单的实现代码:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int evalRPN(vector<string>& tokens) {
stack<int> s;
for (int i = tokens.size() - 1; i >= 0; --i) {
string& token = tokens[i];
if (token == "+" || token == "-" || token == "*" || token == "/") {
int op1 = s.top(); s.pop();
int op2 = s.top(); s.pop();
if (token == "+") s.push(op1 + op2);
else if (token == "-") s.push(op1 - op2);
else if (token == "*") s.push(op1 * op2);
else if (token == "/") s.push(op1 / op2);
} else {
s.push(stoi(token));
}
}
return s.top();
}
int main() {
vector<string> tokens = {"+", "3", "*", "4", "5"}; // 表达式为 + 3 * 4 5
int res = evalRPN(tokens);
cout << res << endl; // 输出 23
return 0;
}
```
注:上述代码使用了 C++11 标准中的 `stoi` 函数将字符串转换为整型。如果你的编译器不支持该函数,可以考虑手动实现一个字符串转整数的函数。
阅读全文