2013-05-03 90 views
-1

程序沒有正確找到名稱「John Fitzgerald Kennedy」的每個部分的子字符串,並且不能在單獨的行上輸出每個名稱。該程序輸出一個超出範圍的例外,甚至不顯示第二個名字,只有第一個。我將如何輸出每個單獨的行上的每個名字?簡單C++子字符串問題

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 

string fullName="", 
     firstName="", 
     middleName="", 
     lastName=""; 

cout<<"Enter your full name: "; 
cin>>fullName; 

firstName=fullName.substr(0,4); 
middleName=fullName.substr(4,14); 
lastName=fullName.substr(14,19); 

cout<<firstName<<endl; 
cout<<middleName<<endl; 
cout<<lastName; 

cin.get(); 
cin.get(); 

return 0; 
} 

回答

1
cin>>fullName; 

停止讀取標準輸入,當它遇到的第一空間。你需要的是像

​​

命令讀取整條生產線與空間一起,然後一塊他們獲取名稱的不同部分。

+0

這是解決方案! – Klinetel 2013-05-03 02:47:09

1

還有一點需要注意的是:

firstName=fullName.substr(0,4); 
middleName=fullName.substr(4,14); 
lastName=fullName.substr(14,19); 

substr的第二個參數是length of the substring子串的結束索引,如果你不意味着你的名字是4個字符長,中間名是14個字符長,等等,你可能需要將其更新到以下幾點:

firstName=fullName.substr(0,4); 
middleName=fullName.substr(4,10); 
lastName=fullName.substr(14,5);