2011-08-09 27 views
1

可能重複:
Remove spaces from std::string in C++學習CPP:拆分字符串和操作?

我開始學習CPP。希望你們能幫助我。現在,我遇到了字符串問題。我從用戶那裏得到輸入,並且想要忽略空格併合並字符串。那就是:

getline(cin, userInput); 

如果用戶輸入的是:你好,我的名字是

我想結合:Hellomynameis

是否有一個快速的方法來做到這一點。您的幫助將不勝感激。謝謝。

編輯:

而且,對於另一種情況:如果用戶輸入的是:關鍵字-a參數1參數2參數3

我如何分開的話,因爲我要檢查什麼是「關鍵字」 ,「選項」和參數。

+0

「空白」!= 「空間」。但[最佳答案](http://stackoverflow.com/questions/83439/remove-spaces-from-stdstring-in-c#83538)有回答這個問題。 – MSalters

回答

4

您可以使用:

remove_if(str.begin(), str.end(), ::isspace); 

算法只改變容器包含的值的值,而不是,所以,你需要調用string::erase實際修改調用remove_if後的容器的長度。

str.erase(remove_if(str.begin(), str.end(), isspace), str.end()); 

,或者如果你是一個Boost球迷,你可以簡單的使用:

erase_all(str, " "); 
+0

謝謝Als。哦,我的..多數民衆贊成如此之快!剛剛發佈了幾秒鐘前的問題。你能看到我編輯的問題嗎? – georgie

+0

你也需要'擦除'。 'std :: remove_if'不會從字符串中刪除任何東西。 –

+0

@尼科爾·布拉斯:抓住了我的編輯。檢查更新。 –

0

使用istringstream如果你只是想分開的話:

istringstream iss(userInput) 
iss >> blah1 >> blah2 ... 

blah1可任何類型。例如,如果blah1是一個浮點數,那麼iss >> blah1將嘗試將該單詞轉換爲浮點數(如C函數atof)。

如果你想做參數解析,getopt庫可能是你在找什麼。這就是驅動大部分gnu命令行實用程序(如ls)的參數解析的原因。

+0

Hi @Foo。嗯......「iss >> blah1 >> blah2」,表示有2個用戶輸入來自用戶分隔的空間嗎?我如何確定用戶輸入的參數數量?我正在考慮做一些驗證,就像用戶輸入5個以上的參數一樣,那麼我會提示錯誤信息 – georgie

0

爲了擺脫@Als建議的正確的空間。

爲了解析這些命令行參數: 你或許可以使用圖書館即

的boost :: program_options(http://www.boost.org/doc/libs/1_47_0/doc/html/program_options。 HTML),

或getopt說明

或libargh(http://bisqwit.iki.fi/source/libargh.html)