Rückblick – Wortfrequenz
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 75 von 104.
Aufgabe
EinfachLassen 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 eineWordAnalyzer-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 WortgetCount(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 dannstd::sortmit einem Lambda verwenden, das zuerst nach Häufigkeit (absteigend) und bei Gleichstand nach Wort (aufsteigend) vergleicht.main.cpp: Lesen Sie eine Ganzzahlnin der ersten Zeile ein, die angibt, wie viele Wörter folgen werden. Lesen Sie dannnWörter ein, eines pro Zeile.Erstellen Sie einen
WordAnalyzer, fügen Sie alle Wörter hinzu und zeigen Sie dann Folgendes an:- Geben Sie
Total words: <count>aus - Geben Sie
Unique words: <count>aus - Geben Sie
Word frequencies:aus, gefolgt vom Aufruf vonprintByFrequency()
- Geben Sie
Zum Beispiel bei der Eingabe:
7
apple
banana
apple
cherry
banana
apple
dateDie Ausgabe sollte sein:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Beachten 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
theAusgabe:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Probier 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
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamensräume & GültigkeitsbereicheEinführung in OOP in C++Klassen vs. ObjekteDer 'this'-PointerMethoden (Elementfunktionen)Attribute (Datenelemente)Grundlagen zu Ctors & DtorsRückblick - Einfacher Taschenrechner4Klasseneigenschaften
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen & KlassenZusammenfassung - Bankkonto-Manager7Vererbung
Grundlagen der VererbungZugriffsstufen bei VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick - Mitarbeiter-Hierarchie10STL-Übersicht
STL-Übersicht & PhilosophieSTL-ContainerIteratorenSTL-AlgorithmenFunktoren & Lambda-AusdrückeRückblick – Wortfrequenz2Speicherverwaltung
Stack vs. Heap SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Smart Pointers in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsspezifizierer in C++Zugriffsspezifizierer im DetailInformation HidingStruct vs. ClassVerschachtelte & innere KlassenRückblick - Studentenverwaltungssystem8Polymorphie
Kompilierzeit- vs. Laufzeit-PolymorphieFunktionsüberladungVirtuelle Funktionen – WiederholungRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIZusammenfassung – Formen-Rechner3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorVerschiebekonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktoren im DetailRule of Three / Five / ZeroZusammenfassung - String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladen der [] und () OperatorenTypumwandlungsoperatorenRückblick - Matrix-Klasse9Templates
FunktionstemplatesKlassentemplatesTemplate-SpezialisierungVariadische TemplatesSFINAE & Type Traits GrundlagenRückblick - Generische Container