为什么在后缀评估中尝试减法时不起作用?
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。使用一个改为排队,并更改操作数的顺序以获得您真正想要的。
更新
抱歉,我的解释没有考虑后缀评估。正如评论所述,它应该始终根据定义使用堆栈。尽管如此,我的回答可能解释了为什么您会想到错误的结果。
我正在尝试从 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。使用一个改为排队,并更改操作数的顺序以获得您真正想要的。
更新
抱歉,我的解释没有考虑后缀评估。正如评论所述,它应该始终根据定义使用堆栈。尽管如此,我的回答可能解释了为什么您会想到错误的结果。