D
D
Danya  2021-11-09 23:52:17
C++ / C#
Danya  , 2021-11-09 23:52:17

Yandex.Practice C++ What am I doing wrong?

Hey! What am I doing wrong?
Quest(link)

Task(text)

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

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

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

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

The code:
#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;
        }
    }

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

Возможные проблемы:
- Вы неправильно обрабатываете случай 0 слов
- Вы неправильно обрабатываете случай 1 слова
- Вы неправильно обрабатываете случай 2 слов
- Вы неправильно обрабатываете случай с пустым словом
- Вы должны считывать только одну строку до перевода строки
- Неправильно обрабатываются примеры из условия задачи

Answer the question

In order to leave comments, you need to log in

3 answer(s)
W
Wataru, 2021-11-10
@wataru

The whole check should be query[i] == ' '
to_string(32)- will return you "32"instead of a space. Then you can do (char)32or static_cast<char>(32). But ' 'it's still better.
Also, you don't print the length of the entire string at the end - after all, a word always ends there (may be empty).

U
User700, 2021-11-10
@User700

Why to_string? The elements of a string are characters. In order to compare them, all of a sudden, you need to compare two characters.

D
Danya  , 2021-11-12
@MrBrainop

Found the answer!
At the end of the main function it was necessary to add: Code: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;
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question