我正在运行一个简单的程序:
#include<iostream>
#include<math.h>
using namespace std;
double fu (double x) {
double func = pow(x,0.5);
return func;
}
int main (int argc, char* argv[]) {
double x = 2;
double func = fu(x);
cout<<"f(x) = "<<func<<endl;
return 0;
}
此处func
是x
计算值的函数
假设,我需要在其他程序中使用此程序,或者如果我想在此程序的命令行运行期间提供函数,例如pow(x,0.5)
或sqrt(1+sin(x))
。
我怎么能这样做?如果我使用argv
执行此操作,那么您能否建议如何将字符串转换为表达式func
(可以通过C ++编译器进行评估)?
有什么建议吗?
答案 0 :(得分:0)
没有简单的方法 自动评估 来自c ++中字符串的那种数学表达式(就像你可能遇到过eval()
种类的表达式一样脚本语言)。
C ++是一种编译语言,编译器无法在编译时将任何内容解析为具体的函数调用和参数值。
您必须在运行时解析这些字符串,分解输入标记和参数,并将解析结果映射到应用解析参数值的相应<cmath>
函数的具体函数调用。 / p>
这不是微不足道的,并且有许多解决方案可用。但这些完全取决于您要从命令行参数解析的数学语言的类型。
答案 1 :(得分:0)
在标准C ++中没有“在字符串中执行表达式”这样的东西。原因是因为C ++是一种编译语言(即输出是二进制代码,处理器可以在没有任何中间解释器的情况下直接执行)。因此,它不能仅仅从字符串中解释表达式(或一般代码)。
我在Snap网站上有一个实现,有C ++代码:
https://sourceforge.net/p/snapcpp/code/ci/master/tree/snapwebsites/lib/snap_expr.cpp
到这里查找其他文件:
https://sourceforge.net/p/snapcpp/code/ci/master/tree/snapwebsites/lib
然而,您可能想要使用现有的库而不是实现表达式解析器和执行环境(我的一个例子,显然,实际上我在snapwebsites / src下有一个名为snapexpr的工具,它将完全与您有关正在谈论!)在这种情况下,你也可以选择不同的语言。例如,Qt提供QScript:
http://qt-project.org/doc/qt-5/qtscript-index.html
在这种情况下,您必须编写JavaScript代码,但由于JavaScript与C ++相对接近,因此它可能适用于您的环境。