2014-10-20 53 views
0

您好,我正在學習C++,我試圖從一行中提取三個名稱(第一,中間,最後)。試圖從一行中使用getline提取三個名稱

cout<< "Please enter your full name" << endl; 
    getline(cin, first_name, ' '); 
    getline(cin, midLast_name); 

我把中間名和姓氏作爲變量,然後將它們分開。我需要能夠接受一個空間作爲中間名,所以這就是我正在做的。但是,在我的條件聲明中,即使有代碼,代碼也找不到空格。有任何想法嗎?

if (midLast_name.find(" ") == true) 
{ 
    first_space = midLast_name.find(" "); 
    middle_name = midLast_name.substr(0,first_space); 
    last_space = midLast_name.rfind(" "); 
    last_name = midLast_name.substr(midLast_name.rfind(" ") + 1, full_name.length()); 

} 
+0

你會如何接受一箇中間名作爲空間?如果用戶輸入'First Last'? – 2014-10-20 00:32:58

+1

由於'getline()'得到了這條線,爲什麼不直接得到這條線並處理這條線的分裂呢? – ChiefTwoPencils 2014-10-20 00:38:01

+0

爲什麼不每行都有一個名字?在它們中間有空格的第一個,中間或最後一個名字是很有可能的。 – Galik 2014-10-20 01:02:32

回答

0

string::find(...)返回的位置或string::npos如果沒有找到,所以你的代碼應該比較對npos而非==true

size_t firstspace = midLast_name.find(" "); 
if (firstspace != string::npos) { 
    middle_name= midLast_name.substr(0, firstspace); 
    ... 
}