2012-04-10 2 views
4

Так что я создаю приложение командной строки, и я пытаюсь разрешить команды с параметрами, или если параметр заключен в котировки, он будет рассматриваться как один параметр.std :: getline удаляет пробелы?

Пример: тест "1 2"

"тест" будет команда "1 2" будет один параметр, передаваемый.

Используя следующий фрагмент кода:

while(getline(t, param, ' ')) { 
    if (param.find("\"") != string::npos) { 
     ss += param; 
     if (glue) { 
      glue = false; 
      params.push_back(ss); 
      ss = ""; 
     } 
     else { 
      glue = true; 
     } 
    } 
    else { 
     params.push_back(param); 
    } 
} 

Однако станд :: GetLine кажется автоматически удалить пробелы, который вызывает мои параметры для изменения от «1 2» до «12»

Я огляделся, но результаты залиты «Ответ на вопрос об удалении», а не «Как удалить лишние пробелы».

У кого-нибудь есть предложения?

+0

Вместо того, чтобы изобретать колесо, использовать GNU [ 'gengetopt'] (HTTP: //www.gnu. org/software/gengetopt/gengetopt.html) для автоматизации создания набора правил синтаксического анализа командной строки 'getopt_long', который - среди других опций - обрабатывает текстовые элементы, заключенные в кавычки. –

ответ

7

Однако станд :: GetLine кажется, автоматически удалить пробельных

Это именно то, что вы говорите GetLine сделать:

getline(t, param, ' '); 

Третий аргумент в GetLine İŞ разделителем. Если вы хотите, чтобы разобрать строку ввода, вы должны прочитать его, пока '\n' не найден, а затем обработать его:

while(getline(t, param)) { 
    /* .. */ 
} 
+0

Спасибо, что указали мою ужасную логику. T_T Похоже, мне может потребоваться перерыв. – user1324726

Смежные вопросы