题目来源:大话数据结构,栈章节的问题
后缀表达式计算
例如:9+(3-1)*3+4/2=17
后缀表达式为:931-3*+42/+
因此我们可以利用栈来进行处理操作,遇到数字就进栈,遇到字符就栈顶的两个元素出栈,结果再进栈。运算结果进栈,就可以得到计算的结果。
#include <iostream>
#include <stack>
using namespace std;
//逆波兰表示法求解
int polandSum(string input)
{
stack<int> mystack;
int first = 0;
int second = 0;
for (int i = 0; i < input.size(); i++)
{
if (isdigit(input[i]))
{
mystack.push(input[i] -'0');
}
else //符号
{
second = mystack.top();
mystack.pop();
first = mystack.top();
mystack.pop();
if (input[i] == '-')
{
mystack.push(first -second );
}
if (input[i] == '+')
{
mystack.push( first+second );
}
if (input[i] == '*')
{
mystack.push(first*second);
}
if (input[i] == '/')
{
mystack.push(first / second); // Fix here, change to num2 / num1
}
}
}
return mystack.top();
}
int main() {
string s = "931-3*+42/+";//目前只能解决 个位数的运算,若存在十位,那么字符串的形式又会改变,因此代码又会改
cout << polandSum(s);
return 0;
}