0Pricing
C++ Academy · Lezione

Un contatore della frequenza delle parole

Conteggi le occorrenze di ogni parola in un file di testo usando std::map

Un contatore della frequenza delle parole è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Obiettivo del progetto

Legga un file di testo e stampi ogni parola distinta con il numero di occorrenze. È un problema classico, risolto in modo chiaro con std::map o std::unordered_map.

Header necessari

Servono per l'I/O dei file, le stringhe e un contenitore associativo.

#include <fstream>
#include <map>
#include <string>
#include <iostream>

Leggere le parole una alla volta

L'operatore di estrazione >> legge token separati da spazi bianchi: è perfetto per le parole grezze.

std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
    counts[word]++;
}

Normalizzare le parole

Converta ogni parola in minuscolo, in modo che "Hello" e "hello" vengano conteggiate come la stessa parola.

#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
    [](unsigned char c) { return std::tolower(c); });

Rimuovere la punteggiatura

Rimuova la punteggiatura dall'inizio e dalla fine di ogni parola.

while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();

Stampare i conteggi

Scorra la map e stampi ogni coppia. std::map esegue l'iterazione in ordine crescente delle chiavi.

for (const auto& [w, n] : counts) {
    std::cout << w << ": " << n << "\n";
}

Ordinare per frequenza

Per stampare in base alla frequenza invece che in ordine alfabetico, copi le voci in un vector e lo ordini.

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; });

Le N parole più comuni

Stampi solo le prime 10 voci, o un numero qualsiasi N, dal vector ordinato.

for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
    std::cout << entries[i].first << ": " << entries[i].second << "\n";
}

map e unordered_map

Per file di grandi dimensioni, std::unordered_map è mediamente più veloce (ricerca O(1)), ma esegue l'iterazione in un ordine arbitrario. Utilizzi std::map per ottenere un output ordinato.

Stop word

Filtri le parole brevi e comuni, come "the", "and" e "of", utilizzando un insieme di stop word.

static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;

Contare righe o caratteri

Esistono varianti dello stesso modello: conti le righe totali con std::getline e i caratteri totali con std::ifstream + std::istreambuf_iterator.

Considerazioni sulle prestazioni

Per file molto grandi utilizzi unordered_map con chiavi string_view, esegua il mapping del file in memoria con mmap ed eviti allocazioni sull'heap per ogni parola.

Verifica rapida

Quale contenitore esegue automaticamente l'iterazione in ordine alfabetico?

Riepilogo

Un contatore della frequenza delle parole riunisce stream, stringhe, contenitori associativi e algoritmi. Scelga map per un output ordinato o unordered_map per la velocità. Normalizzi le parole, rimuova la punteggiatura e valuti l'uso delle stop word per ottenere risultati più puliti.

Domande Frequenti

La lezione «Un contatore della frequenza delle parole» è gratuita?

Sì — il testo completo di «Un contatore della frequenza delle parole» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Un contatore della frequenza delle parole»?

Conteggi le occorrenze di ogni parola in un file di testo usando std::map Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Un contatore della frequenza delle parole»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Costruire una semplice calcolatrice CLI
  2. Lettura e scrittura di file CSV
  3. Un gioco di indovinare i numeri
  4. Un contatore della frequenza delle parole
← Torna a C++ Academy