我有一个学校项目,我得到了以下信息:
for i=1 to m
if c_i is an operand: Transfer c_i to output.
if c_i is a left parentheses: Push c_i to tmp.
if c_i is a right parentheses: Pop elements from tmp and transfer
them to output until a left-parentheses
is met. Pop left-parentheses.
if c_i is an operator: Let the top tmp element be t. Pop and
transfer elements from tmp to output
until:
p(t) < p(c_i) or
t is a left-parentheses or
tmp is empty.
Push c_i to tmp.
Transfer the remaining elements in tmp to output.
我一直在做这些步骤,但我的输出只在某些时候正确。我想我在与运算符的 if 语句周围的某个地方想错了。我一直在调试2天,我只是找不到解决方案。
如果有人想检查我的代码,我会非常高兴。operatorCheck 函数用于解决这个问题:“我们使用子程序 p 来指定运算符的优先级:
p(+) = 0,
p(−) = 0, p(∗) = 1, p(/) = 1
. 这意味着与乘法和除法相比,加法和减法的优先级较低。”
代码: http: //pastebin.com/TA7UGiGc
谢谢!