c++实现波兰符号法
时间: 2023-07-27 20:23:15 浏览: 140
好的,以下是 C++ 实现波兰符号法的代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
bool isOperator(string token) {
return token == "+" || token == "-" || token == "*" || token == "/";
}
int evaluate(int a, int b, string op) {
if (op == "+") {
return a + b;
} else if (op == "-") {
return a - b;
} else if (op == "*") {
return a * b;
} else if (op == "/") {
return a / b;
} else {
throw runtime_error("Invalid operator: " + op);
}
}
int evaluatePolishNotation(string expression) {
stringstream ss(expression);
vector<string> tokens;
string token;
while (ss >> token) {
tokens.push_back(token);
}
stack<int> s;
for (string token : tokens) {
if (isdigit(token[0])) {
s.push(stoi(token));
} else if (isOperator(token)) {
int b = s.top(); s.pop();
int a = s.top(); s.pop();
int result = evaluate(a, b, token);
s.push(result);
} else {
throw runtime_error("Invalid token: " + token);
}
}
return s.top();
}
int main() {
string expression = "3 4 + 5 *";
int result = evaluatePolishNotation(expression);
cout << result << endl; // 输出:35
return 0;
}
```
这个程序通过 `evaluatePolishNotation` 函数计算一个字符串表示的波兰符号法表达式的值。这个函数先将字符串分解为若干个 token,然后使用一个栈来计算表达式的值。当遇到一个数字时,就将其压入栈中;当遇到一个操作符时,就从栈中弹出两个数字进行计算,并将结果压入栈中。最终栈中只会剩下一个数字,就是表达式的值。
可以看到,在 C++ 中实现波兰符号法需要使用一些库函数,如 `stack`、`string`、`sstream` 等。
阅读全文