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
相关产品推荐
相关产品推荐

