2012-04-10 121 views
4

所以我正在創建一個命令行應用程序,我試圖允許帶有參數的命令,或者如果參數用引號括起來,它將被視爲1參數。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); 
    } 
} 

不過的std ::函數getline似乎自動刪除空白,這是造成我的參數,從「1 2」至「12」

我已經改變環顧四周,但結果充斥着「如何刪除空白」的答案,而不是「如何不刪除空白」

有人有什麼建議嗎?

+0

而是另起爐竈的,使用GNU ['gengetopt'(HTTP://www.gnu。 org/software/gengetopt/gengetopt.html)自動創建一個基於getopt_long的命令行解析器規則集,該規則集除了其他選項外還處理用引號括起來的文本元素。 – 2012-04-10 18:07:16

回答

7

不過的std ::函數getline似乎自動刪除空白

這正是你告訴函數getline做:

getline(t, param, ' '); 

第三個參數的函數getline是分隔符。如果你想解析輸入線,你應該讀它,直到'\n'被發現,然後對其進行處理:

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

謝謝你指出我可怕的邏輯T_T看起來我可能需要休息一下。 – user1324726 2012-04-10 18:15:42