如何为此C++程序提供命令行输入

How to give command line input to this C++ program

本文关键字:命令行 输入 程序 C++      更新时间:2023-10-16

我正在运行一个简单的程序:

#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++计算)?

有什么建议吗?

c++ 中,没有简单的方法可以从字符串中自动计算这种数学表达式(就像您可能在脚本语言中使用过这种eval()表达式一样)。

C++是一种编译语言,编译器实际上无法在编译时将任何内容解析为具体的函数调用和参数值。

您必须在运行时分析这些字符串,分解输入标记和参数,并将分析结果映射到程序内应用解析的参数值的相应<cmath>函数的具体函数调用。

这并非易事,并且有许多可用的解决方案方法。但这些完全取决于您要从命令行参数解析的数学语言类型。

在标准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++,因此它可能在您的环境中工作。