Ein Worthäufigkeitszähler
Zählen Sie mithilfe von std::map, wie oft jedes Wort in einer Textdatei vorkommt.
Ein Worthäufigkeitszähler ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Projektziel
Lesen Sie eine Textdatei und geben Sie jedes eindeutige Wort mit seiner Anzahl an Vorkommen aus. Ein klassisches Problem, das sich mit std::map oder std::unordered_map sauber lösen lässt.
Benötigte Header
Datei-E/A, Zeichenketten und einen assoziativen Container.
#include <fstream>
#include <map>
#include <string>
#include <iostream>Wörter einzeln lesen
Der Extraktionsoperator >> liest durch Leerzeichen getrennte Token – perfekt für unbereinigte Wörter.
std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
counts[word]++;
}Wörter normalisieren
Wandeln Sie jedes Wort in Kleinbuchstaben um, damit „Hello“ und „hello“ als dasselbe Wort gezählt werden.
#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
[](unsigned char c) { return std::tolower(c); });Satzzeichen entfernen
Entfernen Sie Satzzeichen am Anfang und Ende jedes Wortes.
while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();Anzahlen ausgeben
Durchlaufen Sie die Map und geben Sie jedes Paar aus. std::map durchläuft die Elemente in sortierter Schlüsselreihenfolge.
for (const auto& [w, n] : counts) {
std::cout << w << ": " << n << "\n";
}Nach Häufigkeit sortiert
Um nach Häufigkeit statt alphabetisch auszugeben, kopieren Sie die Einträge in einen Vektor und sortieren Sie ihn.
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; });Die häufigsten N Einträge
Geben Sie nur die obersten 10 (oder eine beliebige Anzahl N) Einträge des sortierten Vektors aus.
for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
std::cout << entries[i].first << ": " << entries[i].second << "\n";
}map vs unordered_map
Für große Dateien ist std::unordered_map im Durchschnitt schneller (Suche in O(1)), durchläuft die Elemente aber in beliebiger Reihenfolge. Verwenden Sie std::map für sortierte Ausgaben.
Stoppwörter
Filtern Sie häufige kurze Wörter wie „the“, „and“ und „of“ mithilfe einer Menge von Stoppwörtern heraus.
static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;Zeilen oder Zeichen zählen
Varianten desselben Musters: Zählen Sie die Gesamtzahl der Zeilen mit std::getline und die Gesamtzahl der Zeichen mit std::ifstream + std::istreambuf_iterator.
Überlegungen zur Leistung
Verwenden Sie für sehr große Dateien unordered_map mit string_view-Schlüsseln, bilden Sie die Datei mit mmap ab und vermeiden Sie Heap-Allokationen pro Wort.
Kurztest
Welcher Container durchläuft seine Elemente automatisch in alphabetischer Reihenfolge?
Zusammenfassung
Ein Worthäufigkeitszähler verbindet Streams, Zeichenketten, assoziative Container und Algorithmen. Wählen Sie map für sortierte Ausgaben oder unordered_map für Geschwindigkeit. Normalisieren Sie Wörter, entfernen Sie Satzzeichen und ziehen Sie Stoppwörter für übersichtlichere Ergebnisse in Betracht.
Häufig gestellte Fragen
Ist die Lektion „Ein Worthäufigkeitszähler“ kostenlos?
Ja — der vollständige Text von „Ein Worthäufigkeitszähler“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Ein Worthäufigkeitszähler“?
Zählen Sie mithilfe von std::map, wie oft jedes Wort in einer Textdatei vorkommt. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Ein Worthäufigkeitszähler“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Eine einfache Taschenrechner-CLI erstellen
- CSV-Dateien lesen und schreiben
- Ein Zahlenratespiel
- Ein Worthäufigkeitszähler