Как разобрать аргументы командной строки в C ++? - PullRequest
2 голосов
/ 11 июля 2011

Как эффективно разобрать эту командную строку в 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 ]

16 голосов
/ 11 июля 2011

Рассматривали ли вы boost::program_options или, если вы не можете использовать повышение, getopt_long?

3 голосов
/ 11 июля 2011

Вы можете сделать это намного прозрачнее с помощью std::string и таких функций, как find_first_of, разделяя различные части и получая приятный бонус: каждый раз, когда функция поиска возвращает std::string::npos, вы знаете, что получили неверный аргумент.

3 голосов
/ 11 июля 2011

Я использовал TCLAP ( Templatized C ++ Library Parser Library ) во многих приложениях командной строки на C ++ и был очень доволен этим, но он может не дать вам полной гибкости при чтении параметров в формат, который вы просматриваете, но все же стоит посмотреть, boost :: program_options также является хорошим предложением.

1 голос
/ 11 июля 2011

Я бы посоветовал вам использовать стандартную библиотеку C для разбора аргументов: для этого есть готовая функция getopt.

0 голосов
/ 11 июля 2011

*value = *( text ); В этой строке записывается только один символ.

...