大一菜鸡肝了近两个小时的成果,用于计算真值表;
拿来水一篇博客(并不);
代码中比较重要的两部分是原式向后缀式的转换,遍历所有原子命题的可能取值;
具体的细节看代码吧,尽量添加了注释;
#include
using namespace std;
const int maxn = 105;
const int maxstr = 1e5 + 10;
char s[maxstr],str[maxstr],Vstr[maxn];//依次为原式,后缀式,存放原子命题的符号
bool var[maxn];//不同原子命题的真值
mapv;//储存原子命题对应的编号
void Print_true(bool b){//打印bool对应的真值符号
if(b) printf("T\t");
else printf("F\t");
}
int Priority(char c){//返回运算符的优先级
int p;
switch (c) {
case '!': p = 5; break;
case '&': p = 4; break;
case '|': p = 3; break;
case '-': p = 2; break;
case '=': p = 1; break;
default : p = 0; break;
}
return p;
}
bool