如何使用分隔符连接命令行参数
How to concatenate command line arguments with separator
我从argv中读取了参数,我想将它们放入一个字符串中。例如,如果参数是:man
ls
-la
,那么我想在一个字符串中获取命令字符串"man ls -la"
这是我目前拥有的:
#include <string>
int main(int argc, char**argv) {
string command;
for (int i = 1; i<argv; i++) {
command += argv[i];
}
my_function(command);
}
command
应包含所有用空格分隔的参数:
这是对的吗?
我还有一个编译器错误:
错误 C2446:"<":没有从"字符**"转换为"int">
此错误从何而来?
一个简单的方法:
std::string argument;
std::for_each( argv + 1, argv + argc , [&]( const char* c_str ){ argument += std::string ( c_str ) + " "; } );
std::cout << argument;
或者写你join
函数:
struct Join{
template< typename Container >
std::string operator()( Container first, Container last,const std::string& delimiter = " " ){
std::ostringstream oss;
while( first != last ){
( ( first + 1 ) != last ) ? ( oss << *first << delimiter ) : ( oss << *first );
++first;
}
return oss.str();
}
}join;
用法:
std::string result = join( argv + 1, argv + argc );
std::cout << result << 'n';
您得到的编译器错误是因为您在 for 中使用了 argv
而不是 argc
,这是正确的版本:
for(int i = 1; i < argc;i++) {...}
您还需要在每个参数后添加一个空格(最后一次除外(
for (int i = 1; i<argc; i++) {
command += argv[i];
if (i != argc-1) //this check prevents adding a space after last argument.
command += " ";
}
或在每个参数之前添加空格(第一次除外(
for (int i = 1; i<argc; i++) {
if (i != 1)
command += " ";
command += argv[i];
}
请注意,您从第一个元素 ( for(int i = 1 ...
( 开始迭代。这将跳过始终是可执行文件名称的第一个参数。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 需要有关如何设置getopt_long以正确传递命令行参数的建议
- Bash 脚本和命令行参数