2013-05-03 2 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; 

прекращает чтение стандартного ввода, когда он встречает первое пространство. Что вам нужно, это команда, как

getline(cin, fullName); 

читать всю строку вместе с пробелами, а затем кусок их, чтобы получить различные части имени. более

+0

Это решение! – Klinetel

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); 
Смежные вопросы