给出一个前缀布尔表达式,构造它的真值表(用C)

时间:2017-10-06 13:38:06

标签: c prefix

给定的表达式有大约26个变量'A','B',.....,'Z',

和3个操作员,'&','|','^'(XOR)。

例如:输入 4 7& | AB | CA

4表示变量(A,B,C,D)的数量

7表示前缀表达式的长度。

输出:

A B C D OUTPUT

0 0 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()
        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'}来匹配输入,

但它不起作用。

1 个答案:

答案 0 :(得分:0)

当然可以。一个简单的解决方案依赖于由0到2 ^ n-1之间的数字v表示的“n位向量”。

您使用循环

枚举它们
for (int v = 0; v < (1<<n); v++) {
    ...
}

然后使用最右边的位。如果v & 1不是0,则设置为

如果(v >> 1) & 1不为零,则设置

。 C是(v >> 2) & 1等等。

实际上,任何char letter;它是(v >> (letter-'A')) & 1