Счётчик частотности слов
Подсчитывайте вхождения каждого слова в текстовом файле с помощью std::map.
«Счётчик частотности слов» — бесплатный урок C++ Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Цель проекта
Прочитайте текстовый файл и выведите каждое уникальное слово вместе с числом его вхождений. Это классическая задача, которую удобно решать с помощью std::map или std::unordered_map.
Необходимые заголовочные файлы
Ввод-вывод файлов, строки и ассоциативный контейнер.
#include <fstream>
#include <map>
#include <string>
#include <iostream>Чтение слов по одному
Оператор извлечения >> считывает элементы, разделенные пробелами, — идеально для необработанных слов.
std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
counts[word]++;
}Нормализация слов
Переводите каждое слово в нижний регистр, чтобы «Hello» и «hello» считались одним и тем же словом.
#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
[](unsigned char c) { return std::tolower(c); });Удаление знаков препинания
Удаляйте знаки препинания в начале и конце каждого слова.
while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();Вывод количества вхождений
Переберите map и выведите каждую пару. std::map перебирается в порядке сортировки ключей.
for (const auto& [w, n] : counts) {
std::cout << w << ": " << n << "\n";
}Сортировка по частоте
Чтобы выводить слова по частоте, а не по алфавиту, скопируйте элементы в vector и отсортируйте его.
std::vector<std::pair<std::string, int>> entries(counts.begin(), counts.end());
std::sort(entries.begin(), entries.end(),
[](auto& a, auto& b) { return a.second > b.second; });N самых частых слов
Выведите только первые 10 элементов (или любое число N) из отсортированного vector.
for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
std::cout << entries[i].first << ": " << entries[i].second << "\n";
}map и unordered_map
Для больших файлов std::unordered_map в среднем работает быстрее (поиск за O(1)), но перебирается в произвольном порядке. Используйте std::map для отсортированного вывода.
Стоп-слова
Отфильтруйте распространенные короткие слова, например «the», «and» и «of», используя набор стоп-слов.
static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;Подсчет строк или символов
Варианты того же подхода: подсчитывайте общее число строк с помощью std::getline, а общее число символов — с помощью std::ifstream и std::istreambuf_iterator.
Вопросы производительности
Для огромных файлов используйте unordered_map с ключами string_view, отображайте файл в память с помощью mmap и избегайте выделения памяти в куче для каждого слова.
Быстрая проверка
Какой контейнер автоматически перебирается в алфавитном порядке?
Итоги
Счетчик частот слов объединяет потоки, строки, ассоциативные контейнеры и алгоритмы. Выбирайте map для отсортированного вывода или unordered_map для скорости. Нормализуйте слова, удаляйте знаки препинания и учитывайте стоп-слова, чтобы получать более чистые результаты.
Часто задаваемые вопросы
Урок «Счётчик частотности слов» бесплатный?
Да — полный текст урока «Счётчик частотности слов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Счётчик частотности слов»?
Подсчитывайте вхождения каждого слова в текстовом файле с помощью std::map. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Счётчик частотности слов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание простого калькулятора CLI
- Чтение и запись файлов CSV
- Игра «Угадай число»
- Счётчик частотности слов