Zum Hauptinhalt springen

Aufgabe 20

Schwierigkeitsgrad: Mittel
Themen: Vektoren Programmein- und ausgabe Kontollstrukturen Funktionen

Schreiben Sie ein Programm, das einen Text in Form eines Strings von der Konsole einliest und anschließend zählt, wie oft jedes Zeichen in diesem Text vorkommt.

Um jedes Zeichen zusammen mit seiner Häufigkeit zu speichern, verwenden Sie folgende Klasse:

class Letter
{
public:
char letter;
unsigned count;

Letter(char l, unsigned c) : letter(l), count(c) {}
};

Speichern Sie alle gefundenen Zeichen in einem Vektor von Letter. Jedes neue Zeichen, das noch nicht erfasst wurde, soll als neues Element in den Vektor aufgenommen werden. Wenn ein Zeichen bereits vorhanden ist, erhöhen Sie lediglich den Zähler für dieses Zeichen.

Damit Groß- und Kleinbuchstaben nicht doppelt gezählt werden (z. B. A und a), schreiben Sie eine Funktion void lowercase(string &str).

Diese Funktion soll den gesamten String in Kleinbuchstaben umwandeln, indem sie jeden Buchstaben zwischen 'A' und 'Z' in den entsprechenden Kleinbuchstaben umrechnet (addieren Sie 32 zum ASCII-Wert des Buchstabens).

info

Hinweis: Verarbeiten Sie nur Buchstaben entsprechend. Andere Zeichen (z. B. Satzzeichen oder Ziffern) sollen unverändert bleiben und ebenfalls gezählt werden.

Programmablauf:

1. Lesen Sie einen String von der Konsole ein.

2. Wandeln Sie den String mit Ihrer Funktion lowercase in Kleinbuchstaben um.

3. Zählen Sie, wie oft jedes Zeichen im String vorkommt.

4. Speichern Sie jedes Zeichen und seine Häufigkeit im Vektor.

5. Geben Sie am Ende eine übersichtliche Liste aus, in der jedes Zeichen zusammen mit seiner Anzahl angezeigt wird.

Beispielausgabe:

Eingegebener String: Hallo Welt!
Ausgabe:
h: 1
a: 1
l: 3
o: 1
: 1
w: 1
e: 1
t: 1
!: 1

Optional können Sie die Ausgabe nach den Zeichen alphabetisch sortieren, um sie übersichtlicher zu gestalten.