Почему моя строка не разделяется так, как должна? - PullRequest
0 голосов
/ 12 декабря 2011

Я работаю над проектом сращивания введенной строки имени, и по какой-то причине это не работает.Часть этого кода скопирована из моей книги, которая предположительно работает, поэтому я застрял.Я что-то не так делаю?

#include <iostream>
#include <string>

using namespace std;

void main()
{
    string name;
    int index;
    cout<<"Please enter your full name. ";
    cin>>name;

    cout<<"\n"<<endl;

    index = name.find(' ');
    cout<<"First Name: "<<name.substr(0, index)<<"          "<<name.substr(0, index).length()<<endl;
    name = name.substr(index+1, name.length()-1);

    index = name.find(' ');
    cout<<"Middle Name: "<<name.substr(0, index)<<"         "<<name.substr(0, index).length()<<endl;
    name = name.substr(index+1, name.length()-1);

    cout<<"Last Name: "<<name<<"                "<<name.length()<<endl;
}

1 Ответ

7 голосов
/ 12 декабря 2011

Имена большинства людей состоят как минимум из двух слов.Это получит только один из них:

cout<<"Please enter your full name. ";
cin>>name;

istream operator>> с пробелами.Вместо этого используйте getline:

std::getline(std::cin, name);

Для ваших целей вы, вероятно, могли бы сделать это, что проще:

std::string first, middle, last;
std::cin >> first >> middle >> last;
...