2012-05-11 122 views
1

我一直在試圖calculte正被具有22 + 3 * 9/8輸入分配變量「計算」。我想了很多,但我所有的努力都白費請讓我知道我可以解決這一問題,以便獲得嘗試計算字符串

char calculate[10]; 
calculate = "22+3*9/8"; 
cout<< calculate; 
+2

C++沒有標準的「eval」機制;您需要找到一個庫來完成它,或者自己編寫一個表達式解析器和評估器。 [字符串轉換爲數學評測]的 – geekosaur

+3

可能重複(http://stackoverflow.com/questions/9439295/convert-string-to-mathematical-evaluation) –

+1

您已經發布並不能幫助我們的代碼來了解你'遇到麻煩了。我們可以看到你正在分配'calculate',但沒有試圖告訴我們你是如何評估表達式的。 [堆棧溢出不是你的個人研究助理](http://meta.stackexchange.com/a/128553/142865),所以請告訴我們你已經嘗試了什麼,然後我們可以提供幫助。 –

回答

3

你需要轉換你的綴聲明與postfix那麼它是更容易評估輸出結果的表達式使用堆棧。看到e.g.(有很多方法可以做到這一點),你轉換你的表達後,後綴

22 + 3 * 9/8

- > 22 3 9 * 8/+

可以使用堆棧計算表達式

當一個號碼,然後按堆棧上,當操作者,取上堆疊兩個最上面的操作數,並計算然後推導致堆棧:

expr stack (top ... bottom) 
22 22 
3  3 22 
9  9 3 22 
*  27 22 
8  8 27 22 
/ 3 22  // here u could start using floating numbers instead 3.375 instead of 3 
+  25 
+0

後綴?這是一箇舊的惠普計算器嗎?開玩笑。 Postfix很棒。 – ulu5

1

您可以在C#中使用新的Roslyn API,然後從C++ API調用它。

那麼你可以使用下面的例子:

using Roslyn.Compilers; 
using Roslyn.Scripting; 
using Roslyn.Scripting.CSharp; 


public int Eval(string expr) { 
     var engine = new ScriptEngine(); 
     return (int)engine.Execute(expr); 
} 

警告,雖然,你應該檢查表達式不包含非法字符或其他之類的話,因爲這可能會是一個安全漏洞。