2012-05-25 112 views
0

我想計算用戶輸入的表達式(有效邏輯表達式)的真值表作爲字符串。任何人都可以發佈一個現有的解決方案,或指導我這樣做? 我正在考慮使用一個BitArray(大小爲2 ^的變量)作爲輸出(真值表)。但不知道如何開始。請幫我解決一下這個。表達式的真值表(字符串)

例如: -

p or q or r 

應該導致作爲

False True True True True True True True 

而且

a and b 

應該導致作爲

False False False True 
+3

分享一些樣本和所需的輸出。 –

+1

您至少應該包含一些樣本輸入和輸出。 –

回答

1

首先,你需要解析字符串輸入查找的變量和表達式的結構(即哪些操作應用於哪些子表達式)。

一旦你完成了,你可以將變量的狀態表示爲二進制整數。對於這種表示形式,您可以從0開始(意思是所有變量都是假的),並將真值表的每一行的整數表示加1。通過這種方式,您可以將所有可能的組合考慮在一起。

然後將變量的值應用到表達式中(根據所討論變量的整數位值來代替true/false),並對錶達式的值進行計算。

如果您想要緊湊表示結果,您可以將每個輸入組合的表達式值存儲在線性集合(例如矢量)中,其中輸出的索引對應於上述變量值的整數表示形式。如果你知道什麼變量映射到哪個位的輸入,你可以在任何時候重新創建全表(例如打印)

+0

您能否詳細介紹一下它的解析部分。有沒有內置的解析器可以做到這一點? – Dynamite

+0

你可以看看[這個問題]的答案(http://stackoverflow.com/questions/2292003/boolean-and-math-expression-parser),看看是否有任何符合你的需求。 – Attila

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管理。 錯誤處理也不壞。例外缺少運營商等......

available operators

1

我認爲CKen(http://cken.sourceforge.net/)(對你有好處)。我們支持''大寫''和''小寫'',所以它支持58(= 2×29)個單變量!

而且最重要的是,多表現在它可以使用(由分隔符):

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

在另一方面,它是非常快的!


您必須在表達式中使用它(變量)之前定義變量。