c++ - bool 后缀表示法

标签 c++ c math abstract-data-type

我必须编写一个 ADT 字符堆栈来处理 bool 值的后缀表示法。

这是后缀表示法之一的示例。

T T && F || ! (这将是输入文本)

我知道这计算结果为 false。

我的问题是。

这个符号最终在代码中看起来像什么。 (一旦输入字符串被解析)

我的猜测是:

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

我很确定这是错误的,我离题太远了, 我尝试了各种组合。 我无法让它返回 false。

最佳答案

您通常会按堆栈方式解释 RPN,使用二元运算符从堆栈中弹出两个参数,并弹出一个一元参数。

  1. T T — 将两个 true 值压入堆栈,堆栈为:T T,
  2. && — 弹出两个值,压入:T && T,栈是:T,
  3. F — 将 false 压入堆栈,堆栈为:T F,
  4. || — 弹出两个值,压入:T || F,堆栈为:T
  5. ! — 弹出一个值,压入否定版本:!T,堆栈为:F

所以你最终的结果就是这些操作的结果(从下往上写):

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

您只需要从头开始阅读;首先(从下到上)转换为前缀表示法可能会更容易一些:

! ( || ( F && ( T T ) ) )

然后你只需将二元运算符移到括号内:

! ( || ( F && ( T    T ) ) )
     -----> ----->
! (      F || ( T && T ) )

关于c++ - bool 后缀表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133922/

相关文章:

python - Boost.Python 和 Boost.Function

c++ - Symbian C++ - 删除或隐藏组件(即 CEikLabel)

c - 指向 C 中内置函数的函数指针

c - 在 C 中格式化 typedef struct 语句的差异或正确方法?

c++ - 寻找一个点的 "movement direction"(角度)

performance - 编写无限列表以跳过 p 的每个因子?

c++ - OpenGL 对象在 PC 上以正常速度旋转,但在笔记本电脑上旋转速度极快

调用我的函数,导致程序崩溃 - C | 3DS Homebrew 软件

math - 将任意长度转换为 -1.0 到 1.0 之间的值?

c++ - 为什么 C++17 向命名空间和枚举器添加属性?