如何在C ++中有效地解析这个命令行?
program -parameter1=value1 -parameter2=value2 -parameter3=value3
如何有效地删除参数和值的组合
-parameter=value
我正在尝试使用此代码,但它无法正常运行:
parameter[256], value[256],
while ( --argc > 0 )
{
if ( *argv[argc] == '-' )
{
for ( char * text = argv[argc]; ; )
{
switch ( * ( ++ text ) )
{
case '=' :
{
*value = *( text );
break;
}
default:
{
*parameter = *text;
}
}
}
//Testing parameters and values
}
}
感谢您的意见和改进。
答案 0 :(得分:16)
您是否考虑boost::program_options
或者您是否不能使用提升,getopt_long
?
答案 1 :(得分:3)
我在许多基于C ++的命令行应用程序中使用了TCLAP(Templatized C++ Command Line Parser Library)并对此非常满意,但它可能无法灵活地以您正在查看的格式读取参数,但仍值得一看,boost::program_options也是一个很好的建议。
答案 2 :(得分:3)
您可以使用std::string
以及find_first_of
之类的功能更加透明地执行此操作,拆分不同的部分并获得每次查找函数返回std::string::npos
时的好处,您知道你的论点无效。
答案 3 :(得分:1)
我建议你使用标准C库进行参数解析:有一个名为getopt的预制函数。
答案 4 :(得分:0)
*value = *( text );
此行只写一个字符。