【模板题】【栈】表达式求值问题总结:6263:布尔表达式,01:简单算术表达式求值,4132:四则运算表达式求值(终极BOSS)

6263:布尔表达式:输入一个布尔表达式,请你输出它的真假值

样例输入:
( V | V ) & F & ( F| V)
!V | V & V & !F & (F | V ) & (!F | F | !V & V)

(F&F|V|!V&!F&!(F|F&V))

思路:本题的关键就是定义优先级,表中含义是后来的符号是小于、等于、或者大于先前的符号。其中若符号相同先入的普遍大于后入的。对于“(”和“)”必须仔细考虑。如栈有"("则之后的符号都大,必须压入栈。目前读到“(”则此时它比任何符号都要小,直接入栈。目前读到“)”它优先级最大,必须把能计算的计算完,直到遇到“=”。可以这么考虑:即目前读入的需要压入栈的则优先级小。在栈中要一直保持优先级高的在上面。其中“0”代表非法的比较,或者说表达式中不存在这种情况。
先\后 |  &  !  (  )  #
 |       > < < < > >
 &     > > < < > >
 !       > > = < > >
 (      < < < < = 0
 )      > > > 0 > >

 #     < < < < 0 =

注意:
1、此题的两个“!”之间是=的优先级,即相互抵消
2、注意若出现>则需要循环计算到!=>为止

3、bool型不能用~取反,只能用1-n[ntop-1]

#include<cstdio>
#include<iostream>
#include<string>
#include<map>
using namespace std;
map<char,int>index;//| &   !   (   )   #
char pri[7][7]={ {'>','<','<','<','>','>'},//|
				 {'>','>','<','<','>','>'},//&
				 {'>','>','=','<','>','>'},//!
				 {'<','<','<','<','=','0'},//(
				 {'>','>','>','0','&
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值