Вывести индексы всех пробелов строки
Нужно вывести индексы всех пробелов и отдельно обработать конец строки. Без обработки конца строки, как можно реализовать? (только начинающий, с алгоритмом проблемы)
Пример: green parrot, должен выдавать 5 6 13. При работе данного кода, выдает 5 6
Имеется код:
#include <iostream>
#include <string>
using namespace std;
int main() {
string query;
getline(cin, query);
for (int i = 0; i <= query.size(); ++i) {
if (query[i] == ' ') {
cout << i << endl;
}
}
}
Ответы (3 шт):
Автор решения: MBo
→ Ссылка
Так?
for (int i = 0; i <= query.size(); ++i) {
if (i == query.size() || query[i] == ' ') {
cout << i << endl;
}
}
Автор решения: Maggot
→ Ссылка
Ну можно повыпендироваться и написать лямбду с мьютбл и бешать по ней - почему пишу так - более унифицирвоанно чем просто for но тащить больше хедеров... ждем модули
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
int main() {
std::string line {"a test line"};
auto f{[i{0}](unsigned char ch) mutable {if (std::isspace(ch)) {std::cout << i << std::endl;} i++;}};
std::for_each(std::begin(line), std::end(line), f);
return 0;
}
Автор решения: EOF
→ Ссылка
Вот ещё вариант:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string query;
getline(cin, query);
size_t pos = query.find(' '); // Находим первый пробел и сохраняем его индекс
while (pos != string::npos) // Если пробел в строке есть
{
cout << pos << '\t'; // Выводим индекс
pos = query.find(' ', pos + 1); // Ищем следующий пробел
}
cout << query.size() << endl; // А вот и конец строки
return 0;
}