我需要编写一个程序来解决布尔表达式。
我有一个字符串,例如:'1+0*(1*0)'
我怎样才能得到这个表达式的结果?
我正在考虑使用Shunting-yard algorithm算法将其更改为postfix,然后解决它,但我不知道是否有必要。任何关于如何做到这一点的想法将不胜感激。
我需要编写一个程序来解决布尔表达式。
我有一个字符串,例如:'1+0*(1*0)'
我怎样才能得到这个表达式的结果?
我正在考虑使用Shunting-yard algorithm算法将其更改为postfix,然后解决它,但我不知道是否有必要。任何关于如何做到这一点的想法将不胜感激。
如果方程已经采用后置表示法,则无需使用 Shunting-Yard 算法即可求解。例如,上面1+0*(1*0)
将是1 0 1 0 * * +
. 只需将元素压入堆栈,直到到达运算符,然后弹出 2 个元素,并评估结果,将其推回堆栈。
在示例中,1
、0
、1
和0
被压入堆栈。然后*
导致堆栈弹出0
,然后1
. 结果是0
。它被推入堆栈,现在包含1
, 0
(0
从下到上的顺序)。*
弹出0
并0
从堆栈中弹出,导致被推0
回堆栈。最后,从栈中+
弹出0
并0
从栈中取出,栈为空,结果为 0。
这可以很容易地在汇编中实现,因为几乎每个 CPU 都有一个内置堆栈。只需从字符串中读取字符并按照上述步骤操作即可。您不必担心解析单词,因为操作数/运算符每个不会超过一个字符。