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