繁体   English   中英

C ++将Postfix转换为infix

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM