我想计算用户作为字符串输入的表达式(有效逻辑表达式)的真值表。任何人都可以为此发布现有解决方案或指导我这样做吗?我正在考虑使用 BitArray(大小为 2^no。变量)作为输出(真值表)。但不知道如何开始。请帮我解决一下这个。
前任:-
p or q or r
结果应为
False True True True True True True True
和
a and b
结果应为
False False False True
我想计算用户作为字符串输入的表达式(有效逻辑表达式)的真值表。任何人都可以为此发布现有解决方案或指导我这样做吗?我正在考虑使用 BitArray(大小为 2^no。变量)作为输出(真值表)。但不知道如何开始。请帮我解决一下这个。
前任:-
p or q or r
结果应为
False True True True True True True True
和
a and b
结果应为
False False False True
没有任何第三方库的一种方法是使用带有表达式的 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 管理。错误处理也不错。缺少运算符等的例外情况...
首先,您需要解析字符串输入以查找变量和表达式的结构(即哪些操作应用于哪些子表达式)。
完成后,您可以将变量的状态表示为二进制整数。有了这种表示,您可以从 0 开始(意味着所有变量都是假的),并为真值表的每一行将整数表示增加 1。这样,您可以只计算一次所有可能的组合。
然后将变量的值应用于表达式(根据整数的位值替换为真/假)并计算表达式的值。
如果您想要结果的紧凑表示,您可以将每个输入组合的表达式值存储在线性集合(例如向量)中,其中输出的索引对应于变量值的上述整数表示。如果您知道哪个变量映射到输入的哪个位,您可以随时重新创建完整表(例如用于打印)
我认为 CKen ( http://cken.sourceforge.net/ ) (对你有好处)。
CKen 支持“大写”和“小写”,因此它支持 58 (= 2x29) 个单变量!
最重要的是,可以在其中使用多表达式(通过分隔符):
例子:a,b,c,d,e;(a+b)*c;d*e#a;
另一方面,它非常快!
在表达式中使用它(变量)之前,您必须定义变量。