[英]C++ Converting Postfix to infix
所以我正在用C ++编程一个基于cmd的计算器。 我完成了,但是我想知道,将中缀转换为后缀后,我有一个称为后缀队列的队列,其中包含按正确顺序排列的运算符/操作数。 如何将后缀表达式转换回中缀?
如果您不介意产生一些额外的括号,那应该很容易。 基本上,您像往常一样大致上“评估”后缀数据,除了当您到达一个运算符时,不是打印该运算符并将结果压入堆栈,而是打印出一个开放括号,第一个操作数,运算符,第二个操作数,最后是一个封闭的对象。
如果您不介意更改顺序,那么避免多余的括号也很容易。 向后移动表达式,将值从operator operand operand
operand operator operand
重新排列为operand operator operand
。 如果遇到需要操作数的运算符,则有一个子表达式可以类似地打印出来。 仅当且仅当该子表达式的运算符的优先级低于先前遇到的运算符时,才需要将该子表达式括在括号中。
例如,考虑: ab + c *
。 向后走,我们得到*
,然后是c
,所以我们首先打印出c *
。 然后我们需要另一个操作数,但是我们有一个+
,所以我们有一个子表达式。 由于+
的优先级低于*
,因此需要将该子表达式括在括号中,因此得到c * (b + a)
。
相反,如果我们有: ab * c +
,我们将类似地开始生成c +
,但是由于*
的优先级高于 +
,因此我们可以/可以不带括号地打印出a * b
(或b * a
)。
请注意,使用-
或/
(或其他非可交换的任何东西)时,必须更小心一些才能正确确定操作数的顺序。 即使这样,您也不会取回原始表达式,而只是在逻辑上应该与其等效的表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.