Menu
Coddy logo textTech

Rückblick – Worthäufigkeit

Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 75 von 104.

challenge icon

Aufgabe

Einfach

Lass uns einen Word Frequency Analyzer erstellen, der Text verarbeitet und Wortanzahlen nach Häufigkeit sortiert anzeigt. Dies ist eine klassische Aufgabe der Textverarbeitung, die alle STL-Komponenten zusammenführt, die du gelernt hast: map zum Zählen, vector zum Sortieren, Iteratoren zum Durchlaufen und Lambdas für eine benutzerdefinierte Sortierlogik.

Du wirst deinen Code auf zwei Dateien verteilen:

  • WordAnalyzer.h: Definiere eine WordAnalyzer-Klasse, die das Zählen und Analysieren von Wörtern verwaltet.

    Deine Klasse sollte intern eine std::map<std::string, int> verwenden, um Wortanzahlen zu speichern. Implementiere diese Methoden:

    • addWord(const std::string& word): erhöht die Anzahl für das angegebene Wort
    • getCount(const std::string& word): gibt die Anzahl für ein bestimmtes Wort zurück (0, wenn es nicht gefunden wurde)
    • getTotalWords(): gibt die Gesamtanzahl der hinzugefügten Wörter zurück (Summe aller Anzahlen)
    • getUniqueWords(): gibt die Anzahl der eindeutigen Wörter zurück (Größe der Map)
    • printByFrequency(): gibt alle Wörter nach Häufigkeit in absteigender Reihenfolge sortiert aus. Bei Wörtern mit derselben Häufigkeit werden sie alphabetisch sortiert. Jede Zeile sollte Folgendes anzeigen: word: count

    Für printByFrequency() musst du den Inhalt der Map in einen Vektor aus Paaren übertragen und anschließend std::sort mit einem Lambda verwenden, das zuerst nach der Anzahl (absteigend) und bei Gleichstand nach dem Wort (aufsteigend) vergleicht.

  • main.cpp: Lies in der ersten Zeile eine Ganzzahl n, die angibt, wie viele Wörter folgen werden. Lies anschließend n Wörter, jeweils eines pro Zeile.

    Erstelle einen WordAnalyzer, füge alle Wörter hinzu und gib anschließend Folgendes aus:

    1. Gib Total words: <count> aus
    2. Gib Unique words: <count> aus
    3. Gib Word frequencies: aus und rufe anschließend printByFrequency() auf

Zum Beispiel bei der Eingabe:

7
apple
banana
apple
cherry
banana
apple
date

Die Ausgabe sollte folgendermaßen aussehen:

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

Beachte, dass apple zuerst erscheint (höchste Häufigkeit), gefolgt von banana. Danach werden cherry und date alphabetisch sortiert, da sie dieselbe Anzahl haben.

Ein weiteres Beispiel mit der Eingabe:

5
the
cat
the
sat
the

Ausgabe:

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

Probier es selbst

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

using namespace std;

int main() {
    int n;
    cin >> n;
    
    WordAnalyzer analyzer;
    
    // TODO: Lies n Wörter und füge sie dem analyzer hinzu
    
    // TODO: Gib "Total words: <count>" aus
    
    // TODO: Gib "Unique words: <count>" aus
    
    // TODO: Print "Word frequencies:" and call printByFrequency()
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C++-Compiler