试图计算一个字符串

时间:2012-05-11 19:15:31

标签: c++ visual-c++ c++-cli

我一直在尝试计算变量'计算'正在分配输入22 + 3 * 9/8。我尝试了很多,但我的所有努力都是徒劳的,请让我知道如何解决这个问题以获得输出结果

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

2 个答案:

答案 0 :(得分:3)

你需要将你的中缀语句转换为postfix,然后使用堆栈评估表达式要容易得多。见e.g.(有很多方法可以做到这一点)

将表达式转换为postfix

22 + 3 * 9/8 - &gt; 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

答案 1 :(得分: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);
 }

警告,您应该检查表达式是否包含非法字符或其他类型的东西,因为这可能是一个安全漏洞。