一元运算符的后缀问题的缀

问题描述 投票:0回答:1

我使用以下逻辑来实现对后缀转换的中缀,以便稍后进行评估。

  • 中缀转换的循环,在每次迭代中,请执行以下操作:

    • 如果有空格,请忽略它。
    • 如果是运算符,则继续从堆栈中弹出并添加到后缀输出中,直到堆栈为空或堆栈顶部的优先级低于当前运算符。然后,按当前运算符。
    • 如果是'(',请按一下。
    • [如果是'),请继续弹出并添加到后缀中,直到找到'('。然后弹出'('而不添加它。
    • 否则,这是一个数字。将其直接添加到后缀输出中。

注意:当我遇到+-时,我可以确定它是二进制还是一元运算符。如果是二进制,则将其以'+'或[C0​​]的形式添加到堆栈中,但如果是一进制,则将其以'@'或'$'的形式添加。

该算法效果很好,除非两个一元运算符彼此相邻。

例如,-变为"--4",这是错误的。

怎么了?解决此问题的正确方法是什么,不会破坏其他情况?

data-structures stack postfix-notation infix-notation shunting-yard
1个回答
1
投票

您将"@ 4 @"标识为一元运算符,然后按-

    您将下一个@标识为一元运算符,看到堆栈上的该运算符也是一元运算符,并按下另一个-
  1. 您看到@,并将其输出。
  2. 在字符串的末尾,弹出两个一元运算符,给您“ 4 @@”。
  • 当然,一元运算符的优先级应该比其他任何运算符都要高,这样一来,它们总是在被按下任何其他运算符之前就会被弹出。
  • © www.soinside.com 2019 - 2024. All rights reserved.