Rückblick – Worthäufigkeit
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 75 von 104.
Aufgabe
EinfachLass 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 eineWordAnalyzer-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 WortgetCount(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ßendstd::sortmit 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 Ganzzahln, die angibt, wie viele Wörter folgen werden. Lies anschließendnWörter, jeweils eines pro Zeile.Erstelle einen
WordAnalyzer, füge alle Wörter hinzu und gib anschließend Folgendes aus:- Gib
Total words: <count>aus - Gib
Unique words: <count>aus - Gib
Word frequencies:aus und rufe anschließendprintByFrequency()auf
- Gib
Zum Beispiel bei der Eingabe:
7
apple
banana
apple
cherry
banana
apple
dateDie Ausgabe sollte folgendermaßen aussehen:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Beachte, 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
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 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
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamespaces & GültigkeitsbereichEinführung in OOP mit C++Klassen vs. ObjekteDer „this“-ZeigerMethoden (Member-Funktionen)Attribute (Datenmember)Grundlagen zu Ctors & DtorsRückblick – Einfacher Taschenrechner4Klassenattribute
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen und -KlassenZusammenfassung – Bankkontoverwaltung7Vererbung
Grundlagen der VererbungZugriffsebenen bei der VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick – Mitarbeiterhierarchie10STL-Übersicht
STL-Übersicht & PhilosophieSTL-ContainerIteratorenSTL-AlgorithmenFunktoren & Lambda-AusdrückeRückblick – Worthäufigkeit2Speicherverwaltung
Stack- vs. Heap-SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Intelligente Zeiger in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsbezeichner in C++Zugriffsbezeichner im DetailInformationsverbergungStruct vs. KlasseVerschachtelte und innere KlassenWiederholung – Studierendenverwaltungssystem8Polymorphie
Polymorphie zur Compilezeit vs. LaufzeitFunktionsüberladungVirtuelle Funktionen erneut betrachtetRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIRückblick – Shape-Calculator3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorMove-KonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktor im DetailDrei-/Fünf-/Null-RegelZusammenfassung – String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladung der Operatoren [] und ()TypkonvertierungsoperatorenWiederholung – Matrix-Klasse9Templates
FunktionstemplatesKlassen-TemplatesTemplate-SpezialisierungVariadische TemplatesGrundlagen zu SFINAE und Type TraitsRückblick – Generischer ContainerÜbe selbstständig: Online-C++-Compiler