Menu
Coddy logo textTech

Rückblick – Wortfrequenz

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns einen Wortfrequenz-Analysator erstellen, der Text verarbeitet und Wortzahlen sortiert nach Häufigkeit anzeigt. Dies ist eine klassische Textverarbeitungsaufgabe, die alle gelernten STL-Komponenten zusammenführt: map zum Zählen, vector zum Sortieren, Iteratoren zum Durchlaufen und Lambdas für benutzerdefinierte Sortierlogik.

Sie werden Ihren Code auf zwei Dateien verteilen:

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

    Ihre Klasse sollte intern eine std::map<std::string, int> verwenden, um Wortzahlen zu speichern. Implementieren Sie diese Methoden:

    • addWord(const std::string& word) — erhöht den Zähler für das angegebene Wort
    • getCount(const std::string& word) — gibt den Zähler für ein bestimmtes Wort zurück (0, falls nicht gefunden)
    • getTotalWords() — gibt die Gesamtzahl der hinzugefügten Wörter zurück (Summe aller Zähler)
    • getUniqueWords() — gibt die Anzahl der eindeutigen Wörter zurück (Größe der Map)
    • printByFrequency() — gibt alle Wörter sortiert nach Häufigkeit in absteigender Reihenfolge aus. Bei Wörtern mit der gleichen Häufigkeit sortieren Sie diese alphabetisch. Jede Zeile sollte anzeigen: word: count

    Für printByFrequency() müssen Sie den Inhalt der Map in einen Vektor von Paaren übertragen und dann std::sort mit einem Lambda verwenden, das zuerst nach Häufigkeit (absteigend) und bei Gleichstand nach Wort (aufsteigend) vergleicht.

  • main.cpp: Lesen Sie eine Ganzzahl n in der ersten Zeile ein, die angibt, wie viele Wörter folgen werden. Lesen Sie dann n Wörter ein, eines pro Zeile.

    Erstellen Sie einen WordAnalyzer, fügen Sie alle Wörter hinzu und zeigen Sie dann Folgendes an:

    1. Geben Sie Total words: <count> aus
    2. Geben Sie Unique words: <count> aus
    3. Geben Sie Word frequencies: aus, gefolgt vom Aufruf von printByFrequency()

Zum Beispiel bei der Eingabe:

7
apple
banana
apple
cherry
banana
apple
date

Die Ausgabe sollte sein:

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

Beachten Sie, dass apple zuerst erscheint (höchste Häufigkeit), gefolgt von banana, und dann cherry und date alphabetisch sortiert sind, da sie die gleiche 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 ein und füge sie dem analyzer hinzu
    
    // TODO: Gib "Total words: <count>" aus
    
    // TODO: Gib "Unique words: <count>" aus
    
    // TODO: Gib "Word frequencies:" aus und rufe printByFrequency() auf
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung