C++ 正在尝试计算字符串

C++ 正在尝试计算字符串,c++,visual-c++,c++-cli,C++,Visual C++,C++ Cli,我一直在尝试计算分配了22+3*9/8输入的变量“计算”。我尝试了很多,但是我所有的努力都是徒劳的。请告诉我如何解决这个问题,从中获得输出结果 char calculate[10]; calculate = "22+3*9/8"; cout<< calculate; char计算[10]; 计算=“22+3*9/8”; cout您需要将中缀语句转换为后缀,这样使用堆栈计算表达式就容易多了。请参阅(有很多方法可以做到这一点) 将表达式转换为后缀后 22+3*9/8->22+3*9

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

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

cout您需要将中缀语句转换为后缀,这样使用堆栈计算表达式就容易多了。请参阅(有很多方法可以做到这一点)

将表达式转换为后缀后

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

您需要将中缀语句转换为后缀,这样使用堆栈计算表达式就容易多了。请参阅(有很多方法可以做到这一点)

将表达式转换为后缀后

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
可以在C++中使用新的API,然后从C++ API调用它。p> 然后您可以使用以下示例:

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


 public int Eval(string expr) {
       var engine = new ScriptEngine();
       return (int)engine.Execute(expr);
 }
警告,您应该检查表达式不包含非法字符或其他类型的东西,因为这可能是安全性的错误。

您可以在C++中使用新的API,然后从C++ API调用它。p> 然后您可以使用以下示例:

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


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

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

C++没有标准的“eval”机制;您需要找到一个库来执行此操作,或者自己编写一个表达式解析器和求值器。您发布的代码可能存在重复,这无助于我们理解您遇到的问题。我们可以看到您分配的
calculate
不正确,但没有尝试向我们展示如何计算表达式,所以请给我们展示一下你尝试过的,然后我们可以帮助你。你是问C++、C++还是C++?识别正确的编程语言可能会限制可能的答案。@johndilling:我不知道。对于那些认为这是一个好主意的人来说:C++没有标准的“EVE”机制;您需要找到一个库来执行此操作,或者自己编写一个表达式解析器和求值器。您发布的代码可能存在重复,这无助于我们理解您遇到的问题。我们可以看到您分配的
calculate
不正确,但没有尝试向我们展示如何计算表达式,所以请给我们展示一下你尝试过的,然后我们可以帮助你。你是问C++、C++还是C++?识别正确的编程语言可能会限制可能的答案。@johndilling:我不知道。对于那些认为这是个好主意的人:后缀?这是旧的HP计算器吗?开玩笑。后缀很棒,后缀?这是旧的HP计算器吗?开玩笑。后缀很棒。