#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';
}