我必须编写一个ADT字符堆栈来处理布尔值的后缀表示法。
这是后缀符号之一的示例。
T T&&F | |!(这将是输入文本)
我知道这是错误的。
我的问题是。
这个符号在代码中看起来像什么。
(解析输入字符串后)
我的猜测是:

if ( !( true && true || false) )
    //do something;
else
    //do something else

我很确定这是错的而且我已经偏离了目标,
我试过各种组合。
我不能让它返回错误。

最佳答案

通常按堆栈解释RPN,二进制运算符从堆栈中弹出两个参数,而一元运算符则弹出一个参数。
T T-将两个真值推送到堆栈上,堆栈为:T T
&&-弹出两个值,按下并:T && T,堆栈为:T
F-将false推到堆栈上,堆栈为:T F
||-弹出两个值,按下或:T || F,堆栈为:T
!-弹出一个值,按下否定版本:!T,堆栈为:F
因此,您的最终结果是这些操作的结果(自下而上):

bool result = !(false || (true && true));

您只需要从末尾读取它;首先转换为前缀表示法(从下到上)可能会容易一些:
! ( || ( F && ( T T ) ) )

然后将二进制运算符移到括号内:
! ( || ( F && ( T    T ) ) )
     -----> ----->
! (      F || ( T && T ) )

10-08 06:00