0

我想计算用户作为字符串输入的表达式(有效逻辑表达式)的真值表。任何人都可以为此发布现有解决方案或指导我这样做吗?我正在考虑使用 BitArray(大小为 2^no。变量)作为输出(真值表)。但不知道如何开始。请帮我解决一下这个。

前任:-

 p or q or r

结果应为

 False True True True True True True True 

 a and b 

结果应为

 False False False True 
4

3 回答 3

1

没有任何第三方库的一种方法是使用带有表达式的 DataTable。

您甚至可以评估其他结果值类型,而不仅仅是布尔值。

System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("", typeof(Boolean));
table.Columns[0].Expression = "true and false or true";

System.Data.DataRow r = table.NewRow();
table.Rows.Add(r);
Boolean result = (Boolean)r[0];

表达式语法与您的示例不同,但它做同样的事情。一个优点是它的 100% .NET 框架包含 --> Microsoft 管理。错误处理也不错。缺少运算符等的例外情况...

可用的运算符

于 2012-05-25T10:16:06.197 回答
1

首先,您需要解析字符串输入以查找变量和表达式的结构(即哪些操作应用于哪些子表达式)。

完成后,您可以将变量的状态表示为二进制整数。有了这种表示,您可以从 0 开始(意味着所有变量都是假的),并为真值表的每一行将整数表示增加 1。这样,您可以只计算一次所有可能的组合。

然后将变量的值应用于表达式(根据整数的位值替换为真/假)并计算表达式的值。

如果您想要结果的紧凑表示,您可以将每个输入组合的表达式值存储在线性集合(例如向量)中,其中输出的索引对应于变量值的上述整数表示。如果您知道哪个变量映射到输入的哪个位,您可以随时重新创建完整表(例如用于打印)

于 2012-05-25T10:16:18.473 回答
1

我认为 CKen ( http://cken.sourceforge.net/ ) (对你有好处)。

CKen 支持“大写”和“小写”,因此它支持 58 (= 2x29) 个单变量!

最重要的是,可以在其中使用多表达式(通过分隔符):

例子:a,b,c,d,e;(a+b)*c;d*e#a;

另一方面,它非常快!


在表达式中使用它(变量)之前,您必须定义变量。

于 2015-04-06T09:46:44.787 回答