我不知道怎么做,请告诉我怎么做。我知道在 js 中有一个命令eval()
可以解决所有问题。在C++/CLI中怎么样?我不需要 Lua,只需要C++/CLI。
this->InputTextBox->Text
我想从 this->InputTextBox->Text 中取出一个字符串并将其转换为字符串类型:
String^ Matematic = gcnew String(InputTextBox->Text);
之后我需要把它变成int类型,怎么做?我不知道。然后解决一个数学表达式或示例并执行以下操作:
this->InputTextBox->Text = result;
PS(如果它像Js一样在C++ 中会很酷)。eval()
让我们从一个事实开始
eval()——这是 JS 中相当不安全的操作。你可以从这样一个事实开始,如果你不检查表达式,那么你可以在文本框中输入程序的文本而不是表达式,这会修改调用 eval() 的页面。现在关于 C++。
再一次,问题是并非所有表达式都是可计算的。例如,可能存在括号不平衡的表达式。
此外,如果像
是计算出来的,大家都差不多清楚应该是什么结果,那么怎么计算
在这种情况下,答案是什么?
以及如何将表达式限制为多项式?
任务中最困难的部分是确定表达式是否正确。
在一般情况下,您要么需要构建 AST,要么至少检查是否符合 BNF
诚然,如果任务是有限的——就像第一个例子一样——那么它可以在初级水平上解决:
检查括号的平衡
我们开始使用堆栈机进行计算,同时考虑到操作的优先级。这由 Dijkstra 的“排序算法”描述。
在堆栈顶部的计算结束时将是答案。
我没有提供链接,但是通过关键字您可以轻松找到所需的一切。
我只在C#中找到了英文 stackoverflow 的答案。它看起来像这样:
我在C++/CLI中这样做是这样的:
PS(我希望有人帮助😉);