Buchstabenhäufigkeiten in einem String mit C und C++ zählen
In dieser Lektion zählst du mit einem Array aus 26 Elementen, wie oft jeder Kleinbuchstabe in einem String vorkommt.
Einführung
Eine Häufigkeitstabelle ordnet jedem Zeichen einen Zähler zu. Da es nur 26 Kleinbuchstaben von a bis z gibt, können wir ein Array mit 26 Elementen verwenden: Element 0 zählt das a, Element 1 das b und so weiter.
Wichtige Punkte
- Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
- Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
- Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.
Codebeispiele in C und C++
#include <stdio.h>
int main(void) {
const char *text = "banana"; int counts[26] = {0};
// Convert each lowercase letter to an array index.
for (; *text; ++text) ++counts[*text - 'a'];
for (int i = 0; i < 26; ++i) if (counts[i]) printf("%c=%d\n", 'a' + i, counts[i]);
}
a=3
b=1
n=2
#include <array>
#include <iostream>
#include <string>
int main() {
std::string text = "banana"; std::array<int, 26> counts{};
// Convert each lowercase letter to an array index.
for (char character : text) ++counts[character - 'a'];
for (size_t i = 0; i < counts.size(); ++i) if (counts[i]) std::cout << char('a' + i) << '=' << counts[i] << '\n';
}
a=3
b=1
n=2
C und C++ im Vergleich
Der Ausdruck *text - 'a' wandelt einen Buchstaben in einen Index von 0 bis 25 um, weil die Buchstaben aufeinanderfolgende Codes haben. Das Programm erhöht den Zähler an dieser Position, und eine zweite Schleife gibt nur die Buchstaben aus, deren Zähler nicht 0 ist. Für "banana" lautet das Ergebnis a=3, b=1 und n=2.
C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.
C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.
Übungen zur Vertiefung
Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.
- Teste ungültige Eingaben und Grenzwerte.
- Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
- Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
Alle Challenges