我開始學習CPP。希望你們能幫助我。現在,我遇到了字符串問題。我從用戶那裏得到輸入,並且想要忽略空格併合並字符串。那就是:
getline(cin, userInput);
如果用戶輸入的是:你好,我的名字是
我想結合:Hellomynameis
是否有一個快速的方法來做到這一點。您的幫助將不勝感激。謝謝。
編輯:
而且,對於另一種情況:如果用戶輸入的是:關鍵字-a參數1參數2參數3
我如何分開的話,因爲我要檢查什麼是「關鍵字」 ,「選項」和參數。
我開始學習CPP。希望你們能幫助我。現在,我遇到了字符串問題。我從用戶那裏得到輸入,並且想要忽略空格併合並字符串。那就是:
getline(cin, userInput);
如果用戶輸入的是:你好,我的名字是
我想結合:Hellomynameis
是否有一個快速的方法來做到這一點。您的幫助將不勝感激。謝謝。
編輯:
而且,對於另一種情況:如果用戶輸入的是:關鍵字-a參數1參數2參數3
我如何分開的話,因爲我要檢查什麼是「關鍵字」 ,「選項」和參數。
您可以使用:
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, " ");
謝謝Als。哦,我的..多數民衆贊成如此之快!剛剛發佈了幾秒鐘前的問題。你能看到我編輯的問題嗎? – georgie
你也需要'擦除'。 'std :: remove_if'不會從字符串中刪除任何東西。 –
@尼科爾·布拉斯:抓住了我的編輯。檢查更新。 –
使用istringstream如果你只是想分開的話:
istringstream iss(userInput)
iss >> blah1 >> blah2 ...
blah1可任何類型。例如,如果blah1是一個浮點數,那麼iss >> blah1將嘗試將該單詞轉換爲浮點數(如C函數atof)。
如果你想做參數解析,getopt庫可能是你在找什麼。這就是驅動大部分gnu命令行實用程序(如ls)的參數解析的原因。
Hi @Foo。嗯......「iss >> blah1 >> blah2」,表示有2個用戶輸入來自用戶分隔的空間嗎?我如何確定用戶輸入的參數數量?我正在考慮做一些驗證,就像用戶輸入5個以上的參數一樣,那麼我會提示錯誤信息 – georgie
爲了擺脫@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)
「空白」!= 「空間」。但[最佳答案](http://stackoverflow.com/questions/83439/remove-spaces-from-stdstring-in-c#83538)有回答這個問題。 – MSalters