根据特定字符

时间:2015-06-14 11:38:01

标签: c# string-parsing string-split equations truthtable

我会尽力描述我的问题。 我正在尝试编写一个程序来处理类似的方程式:

F = (X∨A) ↔ (X∨B) ( (X OR A) is equivalent to (X OR B) )!

我必须通过' X'来解决它,或者更好地说,写出析取和/或连接的正常形式。

所以,从理论上讲,它是这样的:

enter image description here

当写出真值表时,你必须看F何时等于1(重言式),并写出连词/析取正常形式。

例如(给定表的析取范式): 对于A = 0,B = 0且A = 1,B = 1,X的值无关紧要,对于A = 0,B = 1 AND A = 1,B = 0,X必须为1。

enter image description here

最后, X =A∨B。

由于我是用C#编写的,所以方程式写在TextBox中。 困扰我的是,我应该如何分离我的字符串,以便我可以逐个解决它?

2 个答案:

答案 0 :(得分:0)

首先尝试"分裂()" C#中String类的方法(或其他方法)?首先,您最好推动您的用户在每对令牌(例如A和B)之间插入一个空白(作为Split()的分隔符),这样您就可以专注于您的主要逻辑求解。

答案 1 :(得分:0)

我明白了。它基本上是一个简化的计算器,它不一定(通常)通过按钮进行顺序输入,而是在文本框中键入或粘贴现成的公式。

因此,您需要做的是

  • 定义一组允许的运算符(AND,OR,NOT,XOR等) 各种允许的符号(Λ,V,!,=,!=等,+,*, - ,=,↔等)
  • 检查输入语法是否正确;这意味着 您可能必须先从输入中删除所有空格 字符串,然后使用正则表达式为允许的结构,其中 可能会被证明是一种痛苦
  • 如果输入有效,请先检查括号以确定分组 表达式
  • 根据布尔代数简化

或者只是点击此链接(Java但仍然): Boolean expression solver/simplifier,使用工具bc2cnf或其他任何链接的库,通过限制允许来避免自己的头痛输入到使用过的库允许的一个。

希望这有帮助。