0Pricing
C++ Academy · Урок

Счётчик частотности слов

Подсчитывайте вхождения каждого слова в текстовом файле с помощью 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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание простого калькулятора CLI
  2. Чтение и запись файлов CSV
  3. Игра «Угадай число»
  4. Счётчик частотности слов
← Назад к C++ Academy