2011-06-10 72 views
2

可能重複:
Evaluate C# string with math operators如何解析字符串並獲取公式?在C#

所以可以說我有值爲 「1 * 2 + 4」

基本字符串我將如何去解析信息然後做計算?

我是自我教學的c#但我的假設是這是編程中的常見問題,但沒有使用圖書館如何做到這一點?

到目前爲止,我的結果讓我將字符串分開並放入一個字符數組中,但這是我停下來的地方,因爲我試圖弄清楚如何將字符與運算符和字符進行整數比較。

我不確定我是否正確地選擇了這個方向,但如果有人能指出我的方向是正確的,那將會很棒。

感謝您對高級您的幫助。

+2

你關心操作的順序嗎? – rerun 2011-06-10 18:32:05

+0

沒有想到這一點,但寧願運營商優先的正常規則。 – Anicho 2011-06-10 18:37:28

+0

「沒有使用庫」爲什麼限制?你認爲這是一種常見的操作,但你不想使用其他人已經提出的解決方案? – 2011-06-10 18:41:00

回答

10

你在找什麼是Shunting-yard算法。 您至少需要兩個堆棧;一個用於存儲操作符,一個用於操作數。填充堆棧後,您可以製作一個RPN並計算答案。

+0

+1我最近不得不實施一個非常類似於此的學校作業(我使用了像&和|等運算符)。調車碼算法也是我使用的。您將熟悉Reverse Polish Notations,堆棧和隊列。這是一個體面的運動。 – Pete 2011-06-10 18:43:53

+0

美麗的謝謝你的幫助 – Anicho 2011-06-10 19:04:22

2

那麼c#(或任何其他語言)可能會爲您提供各種工具來幫助您,但無論編程語言如何,總體上解決問題的方法都將保持不變。

所以是的,你確實分裂成運營商&整數。你一個接一個地識別字符,但要儘量以最有效的方式來完成。福斯科的指針指向正確的鏈接。使用Ncalc Library比做體力勞動。

然而,要完成你開始什麼:

int.Parse(str) 

int.TryParse(str, out num) 

...是(你得到的,通過採用分體式()函數?)在C#中,你可能會考慮到的字符串轉換成整數的功能。你可以閱讀他們在這裏...(ParseTryParse

+0

這是有用的解析功能使生活變得更容易.... – Anicho 2011-06-10 19:04:03

2

如果您想了解現有的各種庫,如何做到這一點,你應該瞭解的解析,詞彙和語法分析,表達式樹,編譯原理等。另外,請通過執行它的多個開源庫中的任何一個的源代碼。