#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
string expression;
cout << "Enter Postfix expression \n";
getline(cin, expression);
int result = EvaluatePostfix(expression);
cout << "Output: " << result << "\n";
}
int EvaluatePostfix(string expression)
{
stack<int> S;
for (int i = 0; i < expression.length(); i++)
{
//如果是空格或者"," 则进下一个循环
if (expression[i] == ' ' || expression[i] == ',')continue;
//如果是运算符 则进行计算
else if (isOperator(expression[i]))
{
int operand1 = S.top(); S.pop();
int operand2 = S.top(); S.pop();
int result = PerformOperatiron(expression[i], operand1, operand2);
S.push(result);
}
//如果是数字 则将完整的数读取放入栈中
else if (isNumericDigit(expression[i]))
{
int operand = 0;
while (i < expression.length() && isNumericDigit(expression[i]))
{
operand = (operand * 10) + (expression[i] - '0');
i++;
}
i--;
S.push(operand);
}
}
return S.top();
}
bool isOperator(char C)
{
if (C == '+' || C == '-' || C == '*' || C == '/')return true;
return false;
}
bool isNumericDigit(char C)
{
if (C >= '0' && C <= '9')return true;
return false;
}
int PerformOperatiron(char C, int operand1, int operand2)
{
if (C == '+')return operand1 + operand2;
else if (C == '-')return operand1 - operand2;
else if (C == '*')return operand1 * operand2;
else if (C == '/')return operand1 / operand2;
else cout << "Error Input\n";
return -1;
}
数据结构-Stack-计算后序表达式
最新推荐文章于 2024-07-13 16:00:03 发布