Infix到postfix algo rithm,负责一元运算符

好的,所以算法的I / P将是这样的表达式:

a+(-b) a*-b+c 

即标准C编译器支持的任何表达式。

现在我已经将输入格式化为标记流,标记包含无论是操作符还是操作数的信息。 该算法应该采用这个,并给我一个我可以评估的后缀表达式。

如果我使用标准转换算法,我无法区分一元和二元运算 。 就像*( – b)会给我ab- *,这将以错误的方式进行评估。

如果运算符是表达式中的第一个运算符, 或者是在另一个运算符之后, 或者在左括号之后,那么它就是一元运算符。

您必须在输出字符串中为一元运算符使用其他符号,否则无法区分后缀表示法中的二元和一元变量。

在您的输入中,当您有2个连续的运算符时,第二个运算符将是一元运算符。 如果你有更多的连续运算符,除了第一个运算符之外的所有运算符都将是

转换所有的一元-在操作数-1和运算符* ,并删除所有一元+

如果第一个元素是运算符,则它是一元运算符。

括号是一种特殊情况,但您可以执行第一次忽略它们。 在以下示例中-是连续的*

 4*(-(5)) 

你的代币将成为:

 4 * ( -1 * ( 5 ) ) 

您可以简单地将-6转换为06-以完全消除一元运算符。 我喜欢这种方法,因为它更正交,你不需要在处理时处理特殊情况。

另一种方法是对使用相同符号的一元和二元版本的运算符使用不同的符号,例如。 -仍然是二进制减去和~成为否定符号。