Menu
Coddy logo textTech

Riepilogo - Frequenza delle parole

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 75 di 104.

challenge icon

Sfida

Facile

Costruiamo un analizzatore della frequenza delle parole che elabora il testo e visualizza i conteggi delle parole ordinati per frequenza. Questo è un classico compito di elaborazione del testo che mette insieme tutti i componenti della STL che hai imparato: map per contare, vector per ordinare, gli iteratori per attraversare gli elementi e le lambda per definire una logica di ordinamento personalizzata.

Organizzerai il codice in due file:

  • WordAnalyzer.h: definisci una classe WordAnalyzer che gestisce il conteggio e l'analisi delle parole.

    La tua classe dovrebbe usare internamente un std::map<std::string, int> per memorizzare i conteggi delle parole. Implementa questi metodi:

    • addWord(const std::string& word): incrementa il conteggio della parola specificata
    • getCount(const std::string& word): restituisce il conteggio di una parola specifica (0 se non viene trovata)
    • getTotalWords(): restituisce il numero totale di parole aggiunte (la somma di tutti i conteggi)
    • getUniqueWords(): restituisce il numero di parole uniche (la dimensione della mappa)
    • printByFrequency(): stampa tutte le parole ordinate per frequenza in ordine decrescente. Per le parole con la stessa frequenza, ordinale alfabeticamente. Ogni riga dovrebbe mostrare: word: count

    Per printByFrequency(), dovrai trasferire il contenuto della mappa in un vector di coppie, quindi usare std::sort con una lambda che confronta prima i conteggi (in ordine decrescente) e poi le parole (in ordine crescente) in caso di parità.

  • main.cpp: leggi un intero n sulla prima riga, che indica quante parole seguiranno. Poi leggi n parole, una per riga.

    Crea un WordAnalyzer, aggiungi tutte le parole e poi visualizza:

    1. Stampa Total words: <count>
    2. Stampa Unique words: <count>
    3. Stampa Word frequencies:, poi chiama printByFrequency()

Per esempio, con questo input:

7
apple
banana
apple
cherry
banana
apple
date

L'output dovrebbe essere:

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

Nota come apple appaia per prima (frequenza più alta), seguita da banana; poi cherry e date sono ordinate alfabeticamente perché hanno lo stesso conteggio.

Un altro esempio con questo input:

5
the
cat
the
sat
the

Output:

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

Provalo tu

#include <iostream>
#include <string>
#include "WordAnalyzer.h"

using namespace std;

int main() {
    int n;
    cin >> n;
    
    WordAnalyzer analyzer;
    
    // TODO: Leggi n parole e aggiungile all'analizzatore
    
    // TODO: Stampa "Total words: <count>"
    
    // TODO: Stampa "Unique words: <count>"
    
    // TODO: Stampa "Word frequencies:" e chiama printByFrequency()
    
    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online