1

我需要编写一个程序来解决布尔表达式。

我有一个字符串,例如:'1+0*(1*0)'

我怎样才能得到这个表达式的结果?

我正在考虑使用Shunting-yard algorithm算法将其更改为postfix,然后解决它,但我不知道是否有必要。任何关于如何做到这一点的想法将不胜感激。

4

1 回答 1

1

如果方程已经采用后置表示法,则无需使用 Shunting-Yard 算法即可求解。例如,上面1+0*(1*0)将是1 0 1 0 * * +. 只需将元素压入堆栈,直到到达运算符,然后弹出 2 个元素,并评估结果,将其推回堆栈。

在示例中,1010被压入堆栈。然后*导致堆栈弹出0,然后1. 结果是0。它被推入堆栈,现在包含1, 00从下到上的顺序)。*弹出00从堆栈中弹出,导致被推0回堆栈。最后,从栈中+弹出00从栈中取出,栈为空,结果为 0。

这可以很容易地在汇编中实现,因为几乎每个 CPU 都有一个内置堆栈。只需从字符串中读取字符并按照上述步骤操作即可。您不必担心解析单词,因为操作数/运算符每个不会超过一个字符。

于 2013-06-23T23:43:14.957 回答