2013-12-08 72 views
0

C++(包含在某個庫或頭文件中)中是否有函數計算表達式的字符串?我們假設我們有一個字符串,它等於2 + 3 * 8 - 5(但它是從用戶的鍵盤獲取的,所以我們不知道寫代碼的時候究竟是什麼表達式),我們希望這個函數可以計算它,但是,當然是按照正確的順序(1.權力/根2.時間/分3.增加/減少)。計算表達式的函數

我試圖把所有的數字都整數和運算符都轉換成一個字符數組(好吧,實際上是矢量,因爲我不知道它將包含多少數字和運算符),但是我我不知道接下來要做什麼。

請注意,我在問是否有任何功能已經寫入,如果沒有,我會再試一次。

+0

此線程[解決由用戶定義的變量等式](http:// stackoverflow。com/questions/16577756 /求解一個由用戶定義的變量方程)可能會有所幫助。 –

回答

1

通過計數的代碼沒有標準庫,我認爲這意味着「評估表達」。

你將不得不使用像boost :: spirit這樣的解析器生成器來正確地執行此操作。如果您嘗試用手寫作,我會保證所有參與者的痛苦和痛苦。

嘗試在這裏尋找對計算器的應用程序,有幾個:

http://boost-spirit.com/repository/applications/show_contents.php

也有升壓::精神例子一些簡單的計算器式的語法。

+0

謝謝,我會試試這:)。 – Fiodor

+0

而不是鏈接到舊的示例頁面,您可以鏈接到相關的現有問題:) http://stackoverflow.com/questions/15123412/how-to-verify-algebraic-statements-using-boostspirit – sehe

+0

編碼4-爆炸計算器是直截了當的,是一個值得的練習。 –

0

你必須自己做,因爲是處理中綴式分辨率

如果你這樣做,請包括你正在嘗試,我們可以幫你

+0

如果您對性能沒有擔憂,那麼調用外部應用程序爲您執行此操作是一個不錯的選擇。檢查popen()和'bc'作爲選項。 – nyrl

+0

@nyrl相當聰明 - 我只是在回答,如果有任何**標準**存在,並且我確信沒有。由於問題可能是模糊的 - 建議作爲解決方案,如果你想解釋popen –

1

很奇怪的是,別人在我之前有沒有您重定向到this particular algorithm這是很容易實現和您的字符串轉換成這個叫RPN Reverse Polish Notation (RPN).計算表達式特別的東西很容易,難的是實現調車場,但它是有所作爲很多次之前,你可能會發現很多關於這個主題的教程。

的算法快速概述:

  1. PRN - RPN是編寫消除了括號中需要表達的一種方式,因此它允許更容易計算。實際上,爲了計算一個這樣的表達式,您可以在保留一堆操作數的同時從左向右移動字符串。無論何時遇到操作數,都可以將它推入堆棧。只要你遇到一個操作標記,就可以計算它在最後2個操作數上的結果(如果操作是二進制的,最後只有它是一元的)並將它推入堆棧。沖洗並重復,直到字符串結束。

  2. 調車場真的很難簡單地概述,如果我確實試圖完成這個任務,這個答案將最終看起來很像我上面鏈接的維基百科文章,所以我將這個麻煩保存給我們兩個。

T1; DR;閱讀第一句中的鏈接。

+0

我要試試這個,但由於我對編程相當陌生,不擅長數學(初中),我不確定我是否會理解這一點。但正如我所說 - 我會試試這:)。 – Fiodor