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 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 classe WordAnalyzer qui 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 utiliser std::sort avec 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 entier n sur la première ligne, indiquant combien de mots vont suivre. 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:, puis appelez printByFrequency()

Par exemple, avec l’entrée :

7
apple
banana
apple
cherry
banana
apple
date

La sortie doit être :

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

Remarquez 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
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 à 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

Entraînez-vous par vous-même : Compilateur C++ en ligne