Un compteur de fréquences des mots
Compter les occurrences de chaque mot dans un fichier texte avec std::map
Un compteur de fréquences des mots est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Objectif du projet
Lisez un fichier texte et affichez chaque mot distinct avec son nombre d'occurrences. C'est un problème classique que l'on résout proprement avec std::map ou std::unordered_map.
En-têtes requis
Les entrées-sorties de fichiers, les chaînes de caractères et un conteneur associatif.
#include <fstream>
#include <map>
#include <string>
#include <iostream>Lire les mots un par un
L'opérateur d'extraction >> lit les jetons séparés par des espaces, ce qui est parfait pour les mots bruts.
std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
counts[word]++;
}Normaliser les mots
Convertissez chaque mot en minuscules afin que « Hello » et « hello » soient comptés comme un seul et même mot.
#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
[](unsigned char c) { return std::tolower(c); });Retirer la ponctuation
Retirez la ponctuation au début et à la fin de chaque mot.
while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();Afficher les occurrences
Parcourez la map et affichez chaque paire. std::map parcourt les éléments dans l'ordre trié des clés.
for (const auto& [w, n] : counts) {
std::cout << w << ": " << n << "\n";
}Trier par fréquence
Pour afficher les éléments par fréquence plutôt que par ordre alphabétique, copiez-les dans un vector et triez-le.
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; });Les N plus fréquents
Affichez uniquement les 10 premiers éléments (ou n'importe quel nombre N) du vector trié.
for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
std::cout << entries[i].first << ": " << entries[i].second << "\n";
}map ou unordered_map
Pour les gros fichiers, std::unordered_map est en moyenne plus rapide (recherche en O(1)), mais parcourt les éléments dans un ordre arbitraire. Utilisez std::map pour obtenir une sortie triée.
Mots vides
Filtrez les mots courts et fréquents comme « le », « et » et « de » à l'aide d'un ensemble de mots vides.
static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;Compter les lignes ou les caractères
Variantes du même modèle : comptez le nombre total de lignes avec std::getline et le nombre total de caractères avec std::ifstream et std::istreambuf_iterator.
Considérations de performance
Pour les fichiers très volumineux, utilisez unordered_map avec des clés string_view, projetez le fichier en mémoire avec mmap et évitez les allocations sur le tas pour chaque mot.
Vérification rapide
Quel conteneur parcourt automatiquement les éléments dans l'ordre alphabétique ?
Récapitulatif
Un compteur d'occurrences des mots réunit les flux, les chaînes de caractères, les conteneurs associatifs et les algorithmes. Choisissez map pour une sortie triée ou unordered_map pour la rapidité. Normalisez les mots, retirez la ponctuation et envisagez les mots vides pour obtenir des résultats plus propres.
Questions Fréquemment Posées
La leçon « Un compteur de fréquences des mots » est-elle gratuite ?
Oui — le texte complet de « Un compteur de fréquences des mots » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Un compteur de fréquences des mots » ?
Compter les occurrences de chaque mot dans un fichier texte avec std::map Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Un compteur de fréquences des mots » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Construire une calculatrice CLI simple
- Lire et écrire des fichiers CSV
- Un jeu de devinettes numériques
- Un compteur de fréquences des mots