2010-04-29 83 views
0

編程新手在這裏。我試圖讓用戶在控制檯的一行(例如「John Jane Doe」)中輸入他們的名字firstname middleName lastName。我想讓middleName是可選的。所以如果用戶輸入「John Doe」,它只會保存名字和姓氏字符串。如果用戶輸入「John Jane Doe」,則它將保存所有三個。C++ cin空格問題

我打算用這樣的:

cin >> firstName >> middleName >> lastName; 

然後我意識到,如果用戶選擇忽略他們的中間名,進入「李四」控制檯將只是等待用戶輸入第三個字符串......我知道我可以用一個大字符串來完成這個任務,並將其分解爲兩到三個,但是不是有一種更簡單的方法來處理上面的三個字符串嗎?

我覺得我在這裏錯過簡單的東西...

在此先感謝。

+0

Yeap,fixed。謝謝! – buddyfox 2010-04-29 07:04:20

回答

5

使用getline然後使用stringstream解析。

#include <sstream> 

string line; 
getline(cin, line); 
istringstream parse(line); 

string first, middle, last; 
parse >> first >> middle >> last; 
if (last.empty()) swap(middle, last); 
+0

因爲buddyfox是一個新手,我威脅要刪除我的票,因爲你省略了'std ::'前綴。 ':)' – sbi 2010-04-29 07:09:13

+1

@sbi:lol,在'std ::'我們有所不同。我寧願不要嚇到新手,也不要折磨自己; v)。 – Potatoswatter 2010-04-29 07:11:41

+0

@sbi:感謝您的修復。 – 2010-04-29 07:11:52