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