Задача понятна. Ниже даю подробное решение с пошаговым объяснением и готовым кодом на C++, подходящим для уровня начинающего.
Цель: понять алгоритм и увидеть рабочий пример кода.
Пошаговый разбор:
- Идея: разбивать входную строку на слова по пробелам (и другим пробельным эпизодам) и находить самое длинное слово. При равной длине первым встречавшимся словом максимальной длины мы не меняем его — так сохраняем первый максимум.
- Удобно использовать потоковый подход: считываем строку, затем используем istringstream и оператор >>, который разбивает строку на слова по пробельным символам.
- Алгоритм:
- Прочитать строку s.
- Создать istringstream iss(s).
- В цикле извлекать слова word: while (iss >> word).
- Если длина word больше текущего максимума, обновлять maxWord и maxLen.
- Вывести maxWord и maxLen (вторая строка — длина).
- Сложность: времени O(n), где n — длина входной строки. Память: O(k) для текущего слова.
Пример кода (C++11 и выше):
#include
int main() { std::string s; if (!std::getline(std::cin, s)) return 0;
std::string word, bestWord;
std::size_t bestLen = 0;
std::istringstream iss(s);
while (iss >> word) {
if (word.length() > bestLen) {
bestLen = word.length();
bestWord = word;
}
}
std::cout << bestWord << "\n" << bestLen << "\n";
return 0;
}
Как работает на примере:
- Ввод: "abra cadabra fibra"
- Слова: abra (4), cadabra (7), fibra (5)
- Самое длинное: cadabra, длина 7
- Вывод: cadabra 7
Дополнительные заметки:
- Если вход пустой или содержит только пробелы, bestWord останется пустой строкой и bestLen — 0, что корректно выводится как пустая строка и 0.
- Программа поддерживает любые символы в словах кроме пробелов, и считает слова по пробельным разделителям (через istringstream). Если хочешь ограничиться только пробелами, можно реализовать разбор вручную, но текущий вариант проще и надежнее для задач начального уровня.