如何在C ++中解析命令行参数?

时间:2011-07-11 13:26:57

标签: c++ parsing command-line

如何在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
    }
}

感谢您的意见和改进。

5 个答案:

答案 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 );此行只写一个字符。