为什么在后缀评估中尝试减法时不起作用?

Why isn't work when trying subtraction in postfix evaluation?

我正在尝试从 postfix 获取结果。但是减法时它给我错了,不知道为什么。请给c++新手多多帮助

我从堆栈中得到了两个操作数。并尝试减法 "last popped" - "first popped".

/*pf_exp is postfix expression. String type*/
for (int i=0; i<pf_exp.length(); i++)
{
    int sub_result; // saving result.
    if (48 <= (int)pf_exp[i] && (int)pf_exp[i] <= 57)
    {
        operands.push((int)pf_exp[i] - 48);
    }
    else
    {
        /*operators is a stack<int> from '#include<stack>' storing operands.*/
        int operand2 = operands.top();
        operands.pop();
        int operand1 = operands.top();
        operands.pop();
        if(pf_exp[i] == '+')
        {
            sub_result = operand1 + operand2;
        }
        else if(pf_exp[i] == '-')
        {
            sub_result = operand1 - operand2;
        }
        else if(pf_exp[i] == '*')
        {
            sub_result = operand1 * operand2;
        }
        else if(pf_exp[i] == '/')
        {
            sub_result = operand1 / operand2;
        }
        operands.push(sub_result);
    }
}

我希望“789--”的输出是“-10”,但实际输出是“8”。

您可能将堆栈视为队列。您期望 (7 - 8) - 9 = -10,但是,由于您使用的是堆栈,最后添加的项目将被返回,因此正如 Ben 所写,您实际上是在做 7 - (8 - 9) = 8。使用一个改为排队,并更改操作数的顺序以获得您真正想要的。

更新

抱歉,我的解释没有考虑后缀评估。正如评论所述,它应该始终根据定义使用堆栈。尽管如此,我的回答可能解释了为什么您会想到错误的结果。