Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Construisons un Analyseur de Fréquence de Mots qui traite du texte et affiche le décompte des mots triés par fréquence. Il s'agit d'une tâche classique de traitement de texte qui rassemble tous les composants de la STL que vous avez appris : map pour le comptage, vector pour le tri, les itérateurs pour le parcours, et les lambdas pour la logique de tri personnalisée.

Vous organiserez votre code sur deux fichiers :

  • WordAnalyzer.h : Définissez une classe WordAnalyzer qui gère le comptage et l'analyse des mots.

    Votre classe doit utiliser un std::map<std::string, int> en interne pour stocker le décompte des mots. Implémentez ces méthodes :

    • addWord(const std::string& word) — incrémente le compteur pour le mot donné
    • getCount(const std::string& word) — retourne le décompte pour un mot spécifique (0 si non trouvé)
    • getTotalWords() — retourne le nombre total de mots ajoutés (somme de tous les compteurs)
    • getUniqueWords() — retourne le nombre de mots uniques (taille de la map)
    • printByFrequency() — affiche tous les mots triés par fréquence par ordre décroissant. 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 vers un vecteur de paires, puis utiliser std::sort avec une lambda qui compare d'abord par décompte (décroissant), puis par mot (croissant) en cas d'égalité.

  • main.cpp : Lisez un entier n sur la première ligne indiquant combien de mots suivront. Lisez ensuite n mots, un par ligne.

    Créez un WordAnalyzer, ajoutez tous les mots, puis affichez :

    1. Affichez Total words: <count>
    2. Affichez Unique words: <count>
    3. Affichez Word frequencies: suivi de l'appel à printByFrequency()

Par exemple, avec l'entrée :

7
apple
banana
apple
cherry
banana
apple
date

La sortie devrait être :

Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1

Remarquez comment 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 décompte.

Un autre exemple avec l'entrée :

5
the
cat
the
sat
the

Sortie :

Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1

Essayez 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 à analyzer
    
    // TODO: Afficher "Total words: <count>"
    
    // TODO: Afficher "Unique words: <count>"
    
    // TODO: Afficher "Word frequencies:" et appeler printByFrequency()
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet