разделение слов для полного имени только в одной переменной

#c #string #iostream

#c #строка #iostream

Вопрос:

Я хочу отделить полные имена друг от друга. Это работает только для первого имени.

 #include <iostream>
#include <string>
#include <cstring>
using namespace std;

int main()
{
     string FullName;
     int i = 0;
     cout <<"Enter your full name "<<endl;
     getline(cin,FullName);

     while (FullName[i] != ' ')
     {
         cout<<FullName.substr(i,FullName.find(' '))<<endl;;
         i  ;
     }

     cout <<endl;
     }
return 0
}
  

Я хочу отделить каждое имя в отдельной строке следующим образом: если я введу это:

      Max Michael Max 
  

вывод должен быть с каждым именем в отдельной новой строке:

      Max
     Michael
     Max
  

Как я могу разделить имена, каждое в отдельной строке?

Комментарии:

1. И когда вы использовали свой отладчик для запуска вашей программы по одной строке за раз и проверяли значение i после выполнения каждой строки программы, какие наблюдения вы сделали?

2. Я не могу найти здесь вопрос

3. я не могу придумать алгоритм для этой проблемы, извините

4. FullName.substr(i,FullName.find(' ')) Как описано в документации std::string::substr , вторым аргументом является длина подстроки, а не индекс, при котором генерация подстроки прекращается.

5. Вы можете использовать std::stringstream для разделения строки.

Ответ №1:

Самый простой подход заключается в использовании std::istringstream после считывания имени.

 #include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
     string FullName;
     cout <<"Enter your full name "<<endl;
     getline(cin, FullName);
     string namepart;
     istringstream strm(FullName);
     while ( strm >> namepart )
        cout << namepart << 'n';
}
  

Живой пример