@MrBrainop
Начал изучать html, Python и QT Designer

Яндекс.Практикум C++ Что я делаю не так?

Привет! Что я делаю не так?
Задание(ссылка)
Задание(текст)

Задание 3
Чтобы искать документы, нужно уметь разбивать текст на слова. Вы сделаете это нестандартно — напишете собственный алгоритм.
Слова разделяются пробелами или концом строки. Если видите несколько пробелов подряд, то это значит, что между двумя соседними пробелами есть пустое слово. Конец строки у нас один, и перед ним обязательно заканчивается какое-нибудь слово.
Считайте с терминала строку полностью до перевода строки. Выведите индексы символов, перед которыми заканчиваются слова.

Ограничения
Если вы считали пустую строку, нужно вывести 0, потому что в этой строке есть пустое слово. Оно заканчивается там же, где строка, — перед нулевым символом.
Пример
Формат входных данных

green parrot
Формат выходных данных
5
6
13

Перед символами с этими индексами заканчиваются слова green, пустое слово и слово parrot соответственно.
Что отправлять на проверку
Отправьте на проверку файл main.cpp с реализацией задания.

Код:
#include <iostream>
#include <string>

using namespace std;

int main() {
    string query;
    getline(cin, query);
    
    // выведите все индексы символов, следующие за словами
    for (int i = 0; i < query.size(); i++){
        if(to_string(query[i]) == to_string(32)){
            cout << i << endl;
        }
    }

}
Ошибка:
Задача прошла 0/16 проверок

Возможные проблемы:
- Вы неправильно обрабатываете случай 0 слов
- Вы неправильно обрабатываете случай 1 слова
- Вы неправильно обрабатываете случай 2 слов
- Вы неправильно обрабатываете случай с пустым словом
- Вы должны считывать только одну строку до перевода строки
- Неправильно обрабатываются примеры из условия задачи
  • Вопрос задан
  • 2359 просмотров
Пригласить эксперта
Ответы на вопрос 4
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Вся проверка должна быть query[i] == ' '

to_string(32) - вернет вам "32" вместо пробела. Тогда уж можно делать (char)32 или static_cast<char>(32). Но ' ' - все равно лучше.

И еще вы не выводите длину всей строки в конце - ведь там всегда заканчивается слово (может быть пустое).
Ответ написан
@User700
Зачем to_string? Элементы строки это символы. Для того, что-бы их сравнить, нужно, внезапно, сравнить два символа.
Ответ написан
@MrBrainop Автор вопроса
Начал изучать html, Python и QT Designer
Нашёл ответ!
В конце функции main надо было дописать: cour << query.size() << endl;
Код:
#include <iostream>
#include <string>

using namespace std;

int main() {
    string query;
    getline(cin, query);
    
    // выведите все индексы символов, следующие за словами
    for (int i = 0; i < query.size(); i++){
        if(to_string(query[i]) == to_string(32)){
            cout << i << endl;
        }
    }
    cout << query.size() << endl;
}
Ответ написан
Комментировать
@gasinovanvik
#include
#include
#include
using namespace std;
int main()
{
string word, query;
getline(cin, query);
istringstream ss(query);
while(ss >> query)
{
word += "[" + query + "]\n";

}
for(size_t i = 0; i < word.size(); ++i)
{
cout << word[i];
}
return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы