给定一个前缀布尔表达式,构造其真值表(使用C)
给定的表达式最多有26个变量“A”、“B”、“Z” 和3个运算符“&”、“|”、“^”(XOR) 例如:输入 4.7和| AB | CA 4表示变量(A、B、C、D)的数量 7表示前缀表达式的长度 输出: A、B、C、D输出 0 0 0 0 0 0 1 0 0 0 1 0 0 现在我有了一个计算前缀表达式的算法:给定一个前缀布尔表达式,构造其真值表(使用C),c,prefix,C,Prefix,给定的表达式最多有26个变量“A”、“B”、“Z” 和3个运算符“&”、“|”、“^”(XOR) 例如:输入 4.7和| AB | CA 4表示变量(A、B、C、D)的数量 7表示前缀表达式的长度 输出: A、B、C、D输出 0 0 0 0 0 0 1 0 0 0 1 0 0 现在我有了一个计算前缀表达式的算法: int Expr(){ char c = getchar(); if c is an operator op1 = Expr() o
int Expr(){
char c = getchar();
if c is an operator
op1 = Expr()
op2 = Expr()
return op1 c op2
else if c is a variable
return the value of c
}
我的问题是如何使变量A,B,C,D。。。变成0或1
并执行n^2次以构建真值表
我试图设置一个数组[26]={'A',…,'Z'}来匹配输入
但是它不起作用。当然可以。一个简单的解决方案依赖于由0和2^n-1之间的数字
v
表示的“n位向量”
用循环枚举它们
for (int v = 0; v < (1<<n); v++) {
...
}
(int v=0;v<(11)&1的不是零。C是(v>>2)&1
,等等
实际上,对于任何char字母
;它是(v>>(字母-'A'))&1
无符号长A=0;对于(i='A'to'Z'){val[i]=bool(A);A>=1}A++;
@ibug数组如果是91个元素,而它实际上只需要是26个for(to)元素,这似乎是一种浪费循环最近被添加到C?请将其视为伪代码。它在值a=0上执行26次,然后a增加到1。虽然我不明白,但我会考虑更多。谢谢!