尝试计算字符串

trying to calculate a string

本文关键字:字符串 计算      更新时间:2023-10-16

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

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

将中缀语句转换为后缀,那么使用堆栈评估表达式要容易得多。 例如,请参阅(有很多方法可以做到这一点)

将表达式转换为后缀后

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# 中使用新的 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);
 }

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