Récapitulatif - fréquence des mots
Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy. Leçon 75 sur 104.
Défi
FacileConstruisons un analyseur de fréquence des mots qui traite du texte et affiche le nombre d’occurrences des mots trié par fréquence. Il s’agit d’une tâche classique de traitement de texte qui réunit tous les composants de la STL que vous avez appris : map pour compter, vector pour trier, les itérateurs pour parcourir les données et les lambdas pour définir une logique de tri personnalisée.
Vous organiserez votre code sur deux fichiers :
WordAnalyzer.h: définissez une classeWordAnalyzerqui gère le comptage et l’analyse des mots.Votre classe doit utiliser en interne un
std::map<std::string, int>pour stocker le nombre d’occurrences des mots. Implémentez ces méthodes :addWord(const std::string& word): incrémente le nombre d’occurrences du mot donnégetCount(const std::string& word): renvoie le nombre d’occurrences d’un mot spécifique (0 s’il est introuvable)getTotalWords(): renvoie le nombre total de mots ajoutés (la somme de tous les nombres d’occurrences)getUniqueWords(): renvoie le nombre de mots uniques (la taille de la map)printByFrequency(): affiche tous les mots triés par fréquence décroissante. Pour les mots ayant la même fréquence, triez-les par ordre alphabétique. Chaque ligne doit afficher :word: count
Pour
printByFrequency(), vous devrez transférer le contenu de la map dans un vecteur de paires, puis utiliserstd::sortavec une lambda qui compare d’abord le nombre d’occurrences (par ordre décroissant), puis le mot (par ordre croissant) en cas d’égalité.main.cpp: lisez un entiernsur la première ligne, indiquant combien de mots vont suivre. Lisez ensuitenmots, un par ligne.Créez un
WordAnalyzer, ajoutez tous les mots, puis affichez :- Affichez
Total words: <count> - Affichez
Unique words: <count> - Affichez
Word frequencies:, puis appelezprintByFrequency()
- Affichez
Par exemple, avec l’entrée :
7
apple
banana
apple
cherry
banana
apple
dateLa sortie doit être :
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Remarquez que apple apparaît en premier (fréquence la plus élevée), suivi de banana, puis cherry et date sont triés par ordre alphabétique puisqu’ils ont le même nombre d’occurrences.
Un autre exemple avec l’entrée :
5
the
cat
the
sat
theSortie :
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Essayez vous-même
#include <iostream>
#include <string>
#include "WordAnalyzer.h"
using namespace std;
int main() {
int n;
cin >> n;
WordAnalyzer analyzer;
// TODO: Lire n mots et les ajouter à l'analyzer
// TODO: Afficher "Total words: <count>"
// TODO: Afficher "Unique words: <count>"
// TODO: Print "Word frequencies:" and call printByFrequency()
return 0;
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesGénération et compilation en C++Fichiers d’en-tête et fichiers sourceEspaces de noms et portéeIntroduction à la POO en C++Classes et objetsLe pointeur « this »Méthodes (fonctions membres)Attributs (membres de données)Bases des constructeurs et destructeursRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d’instance et statiquesAccesseurs et mutateursFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d’accès de l’héritageOrdre d’appel des constructeurs et destructeursRedéfinition des méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif : hiérarchie des employés10Vue d’ensemble de la STL
Vue d’ensemble et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - fréquence des mots13Modèles de conception, partie 1
Introduction aux modèles de conceptionModèle SingletonFabrique et fabrique abstraiteModèle BuilderModèle ObserverModèle Strategy2Gestion de la mémoire
Mémoire de pile ou de tasPointeurs et référencesMémoire dynamique (new/delete)Pointeurs intelligents en C++RAII en C++Récapitulatif - Gestionnaire de tableaux dynamiques5Encapsulation
Spécificateurs d’accès en C++Spécificateurs d’accès en profondeurMasquage de l’informationStruct vs classeClasses imbriquées et internesRécapitulatif - Système de gestion des dossiers étudiants8Polymorphisme
Polymorphisme à la compilation vs à l’exécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d’interfaces en C++Conversion dynamique et RTTIRécapitulatif - Calculateur de formes3Constructeurs et destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d’initialisation des constructeursConstructeurs déléguésApprofondissement des destructeursRègle des trois / cinq / zéroRécapitulatif - Classe String6Surcharge des opérateurs
Introduction à la surcharge des opérateursSurcharge des opérateurs arithmétiquesSurcharge des opérateurs de comparaisonOpérateurs de fluxSurcharge de l’opérateur d’affectationSurcharge des opérateurs [] et ()Opérateurs de conversion de typeRécapitulatif – Classe Matrix9Templates
Templates de fonctionsTemplates de classesSpécialisation des templatesTemplates variadiquesBases de SFINAE et des traits de typesRécapitulatif - Conteneur génériqueEntraînez-vous par vous-même : Compilateur C++ en ligne