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

Infix to postfix problem with unary operators

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

注意:当我遇到+-时,我可以判断它是二元运算符还是一元运算符。如果它是二进制的,我将它作为“+”或-添加到堆栈中,但如果它是一元的,我将它添加为“@”或“$”。

该算法运行良好,但两个一元运算符彼此相邻的情况除外。

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

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

看来您需要更改规则,这样您就不会弹出连续的一元运算符。也就是说,给定 "--4":

  1. 您将 - 标识为一元运算符,然后按 @
  2. 你将下一个-标识为一元运算符,看到栈上的运算符也是一元运算符,再压入另一个@.
  3. 你看到了4,输出了
  4. 在字符串的末尾,弹出两个一元运算符,得到“4@@”。

当然,一元运算符应该比任何其他运算符具有更高的优先级,以便它们总是在任何其他运算符被压入之前被弹出。