You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++后缀表达式求值减法结果错误,新手求助排查问题

问题分析与解决

首先,先给你吃个定心丸:你的代码逻辑是正确的,问题出在你对输入的后缀表达式和预期计算式的匹配理解上。

咱们一步步拆解:

你的代码逻辑正确性

在后缀表达式(逆波兰表达式)的计算中,遇到运算符时,确实需要先弹出栈顶的右操作数,再弹出左操作数,然后用「左操作数 运算符 右操作数」来计算——这部分你的代码完全做对了:

int operand2 = operands.top(); // 先弹右操作数
operands.pop();
int operand1 = operands.top(); // 后弹左操作数
operands.pop();
// 计算 operand1 运算符 operand2

输入"789--"的实际计算过程

咱们模拟一下你输入的"789--"的计算步骤:

  • 遍历到'7':压入栈 → 栈内容:[7]
  • 遍历到'8':压入栈 → 栈内容:[7, 8]
  • 遍历到'9':压入栈 → 栈内容:[7, 8, 9]
  • 遍历到第一个'-':弹出9(右操作数)、弹出8(左操作数),计算8 - 9 = -1,压入栈 → 栈内容:[7, -1]
  • 遍历到第二个'-':弹出-1(右操作数)、弹出7(左操作数),计算7 - (-1) = 8 → 这就是你得到的结果。

这个结果是完全正确的,因为"789--"对应的中缀表达式是 7 - (8 - 9),计算结果本来就是8。

如何得到你预期的-10

你想要的结果-10,对应的中缀表达式是 (7 - 8) - 9,对应的后缀表达式应该是**"78-9-"**。用你的代码计算这个表达式的步骤:

  • 压入7、8 → 栈内容:[7, 8]
  • 第一个'-':计算7 - 8 = -1,压入栈 → 栈内容:[-1]
  • 压入9 → 栈内容:[-1, 9]
  • 第二个'-':计算-1 - 9 = -10 → 这就是你预期的结果。

总结

你的代码没有问题,只是输入的后缀表达式和你想要计算的数学式子不匹配。把输入改成"78-9-"就能得到你想要的-10啦。

内容的提问来源于stack exchange,提问作者JWLee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:33:25