我一直在尝试计算使用 22+3*9/8 的输入分配的变量“计算”。我尝试了很多,但我所有的努力都是徒劳的,请让我知道如何解决这个问题以获取输出结果
char calculate[10];
calculate = "22+3*9/8";
cout<< calculate;
我一直在尝试计算使用 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);
}
但是警告,您可能应该检查表达式不包含非法字符或其他类型的东西,因为这可能是一个安全错误。