如何为此C++程序提供命令行输入
How to give command line input to this C++ program
我正在运行一个简单的程序:
#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++,因此它可能在您的环境中工作。
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 是否可以在命令行中将输入参数传递给可执行文件
- 使用makefile中的命令行输入
- 如何在窗口上的命令行中读取输入 .in 文件
- C++使用命令行输入 txt 文件,但打开文件失败
- C 错误:从命令行输入更改为变量输入
- 如何创建一个 void 数组,其大小将由用户从命令行输入指定
- 从命令行输入分配二维数组
- istream用于C++/Poco的命令行输入
- 命令行输入c++
- 从命令行输入
- 基于命令行输入创建 2D 数组
- 从命令行输入参数为带 N 字节的十六进制
- 如何为此C++程序提供命令行输入
- 如何在c++中对命令行输入进行类型检查
- 以不同的方式接收命令行输入
- 为什么在c++中每个循环都不要求命令行输入?
- Visual studio c++从命令行输入大字符串
- 从c++命令行输入文本文件