Eine Zeichenkette durchlaufen
Um mit jedem Zeichen einer Zeichenkette etwas zu tun, etwa bestimmte Buchstaben zu zählen oder nach einer Ziffer zu suchen, gehst du sie in einer Schleife durch, genau wie ein Array aus Zahlen. Es gibt einen Unterschied: Bei einer Zeichenkette musst du ihre Länge nicht kennen. Die Schleife kann beim Nullzeichen aufhören:
char wort[] = "Hallo";
for (int i = 0; wort[i] != '\0'; i++) {
printf("%c\n", wort[i]);
}Das gibt Folgendes aus:
H
a
l
l
oLies die Bedingung als „solange das Zeichen beim Index i nicht das Ende des Textes ist“. Im ersten Durchlauf der Schleife ist i gleich 0 und wort[0] ist 'H'. Nach dem fünften Durchlauf ist i gleich 5, wort[5] ist '\0', und die Schleife endet.
Du kannst die Schleife auch mit strlen schreiben, wie eine Schleife über ein Array mit einer Anzahl. Beide Wege sind richtig:
char wort[] = "Hallo";
int laenge = strlen(wort);
for (int i = 0; i < laenge; i++) {
printf("%c ", wort[i]);
}
printf("\n");Das gibt Folgendes aus:
H a l l oIn der Schleife ist wort[i] ein Zeichen, du kannst es also mit einer if-Anweisung prüfen. Diese Schleife zählt die Buchstaben l, mit demselben Zählmuster wie in der Lektion über Arrays:
char wort[] = "Hallo";
int anzahl = 0;
for (int i = 0; wort[i] != '\0'; i++) {
if (wort[i] == 'l') {
anzahl++;
}
}
printf("l kommt %d-mal vor\n", anzahl);Das gibt Folgendes aus:
l kommt 2-mal vorAchte auf zwei Dinge. Vergleiche ein Zeichen in einfachen Anführungszeichen: Mit der Bedingung wort[i] == "l" lässt sich das Programm hier kompilieren, aber die Bedingung ist nie wahr, und die Anzahl bleibt 0. Und Groß- und Kleinbuchstaben sind verschiedene Zeichen: 'H' == 'h' ist falsch, eine Schleife, die 'h' zählt, findet in "Hallo" also nichts.
So schreibst du es:
Anweisungen
- 1
Gehe
wortmit einerfor-Schleife durch und gib seine Zeichen in einer Zeile aus, jedes gefolgt von einem Leerzeichen:M i s s i s s i p p i. Beende die Zeile nach der Schleife mitprintf("\n");. - 2
Zähle darunter, wie oft der Buchstabe
sim Wort vorkommt, und gibs kommt 4-mal voraus.