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
- Costruire una semplice calcolatrice CLI
- Lettura e scrittura di file CSV
- Un gioco di indovinare i numeri
- Un contatore della frequenza delle parole