2012-05-11 95 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); 
} 

警告,虽然,你应该检查表达式不包含非法字符或其他之类的话,因为这可能会是一个安全漏洞。