#include <iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;
//逆波兰表达式求值
int evalRPN(vector<string>& tokens)
{
stack<int> tmp;
int a, b;
for (auto & vsi : tokens)
{
//判断vsi是不是数字, 是的话压栈, 不是的话看它的size是否大于1, 大于1即也为数字, 同样压栈
if (isdigit(vsi[0]) || vsi.size() > 1)
{
tmp.push(atoi(vsi.c_str()));
}
//如果不是数字, 说明是符号, 取出符号前面的两个数字进行运算, 并将结果直接替换栈顶数字
else
{
a = tmp.top();
tmp.pop();
b = tmp.top();
switch (vsi[0])
{
case '+':
tmp.top() = b + a;
break;
case '-':
tmp.top() = b - a;
break;
case '*':
tmp.top() = b * a;
break;
case '/':
tmp.top() = b / a;
break;
}
}
}
return tmp.top();
}
int main()
{
vector<string> vs{ "10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+" };
cout << evalRPN(vs) << endl;
system("pause");
return 0;
}
C++逆波兰表达式求值
最新推荐文章于 2023-07-27 16:35:12 发布