7
将中缀表达式转换为后缀表示法
当我看到这个封闭问题的标题时,我认为它看起来像是一个有趣的高尔夫挑战代码。因此,让我这样介绍一下: 挑战: 编写一个程序,表达式或子例程,给定一个用infix表示的算术表达式,例如1 + 2,以后缀表示即输出相同的表达式1 2 +。 (注意:类似的挑战在1月初发布。 但是,我确实觉得这两个任务在细节上有很大不同,足以证明这个单独的挑战是正确的。而且,我只在键入下面的所有内容后才注意到另一个线程,我宁愿不只是把它扔掉。) 输入: 输入包括由以下组成的有效缀算术表达式的数目(非负整数表示为一个或多个十进制数字序列),平衡括号来指示分组的子表达式,和四个缀二进制运算符 +,-,*和/。这些中的任何一个都可以由任意数量的空格字符分隔(并且整个表达式都被包围),应将其忽略。1个 对于那些喜欢形式语法的人,这里有一个简单的类似于BNF的语法,定义了有效的输入。为了简洁起见,语法不包含可选空格,该空格可能出现在任意两个标记之间(数字中的数字除外): expression := number | subexpression | expression operator expression subexpression := "(" expression ")" operator := "+" | "-" | "*" | "/" number := digit | digit number digit := "0" | "1" | "2" | …