2012-06-22 55 views
3

首先,抱歉我的英文不好。簡單的數值表達式求解器

對於我在算法和數據結構類中的最後一個項目,我需要在C++中創建一個簡單的數值表達式求解器。它需要解決簡單的表達式,如3*12+(4-6)。我設法分解表達式並將運算符與數字分開,但我不能再進一步了。訣竅是把操作符放在二叉樹上,但我沒有設法做到這一點。

程序只需要使用默認的C++庫。也許我可以建立一些基本的實現?

在此先感謝。

+0

使用堆棧將中綴轉換爲後綴表示法。然後評估後綴表達式。 http://www.cs.man.ac.uk/~pjj/cs212/fix.html –

+3

歡迎來到Stack Overflow!你的英語看起來不錯,不要讓你麻煩。然而,你的文章缺少一個關鍵要素:一個問題。 StackOverflow是一個問題和答案網站。你有問題嗎? –

+0

@Robᵩ倒數第二句話是個問題... – ArtemStorozhuk

回答

0

暫時忘掉二叉樹。

您需要將表達式轉換爲reverse polish notation。在轉換過程中,您正在構建一棵二叉樹!

[逆波蘭式] [2]

+1

正如VanDarg上面所說,似乎這是最好的解決方案。無論如何,我會嘗試後綴一切,看看我得到了什麼。非常感謝! – segfaultd

0

你會希望將其轉換成逆波蘭式的算法轉換有點複雜,但許多網站詳細說明了確切的步驟。做多位數字會使它更復雜一點。

您需要知道的最重要的事情是,對於RPN,您將不得不使用堆棧而不是二叉樹。一旦方程式切換到RPN,您將它的數字清空爲堆棧,直到碰到一個運算符,然後您將從堆棧中取出前兩個數字並對它們進行操作並將該最終值放回堆棧。最後你會在堆棧中留下一個數字,這將是你的方程的答案。