Zeichen einer Zeichenkette
Eine Zeichenkette ist ein Array, jedes ihrer Zeichen hat also einen Index, ab 0 gezählt wie bei jedem Array. name[0] ist das erste Zeichen. Es hat den Typ char, du gibst es also mit %c aus:
char name[] = "Tina";
printf("%c\n", name[0]);
printf("%c\n", name[3]);Das gibt Folgendes aus:
T
aDer letzte Buchstabe von "Tina" hat den Index 3, und beim Index 4 steht das Nullzeichen. Gib es mit %d als Zahl aus, dann siehst du, dass es wirklich da ist:
printf("%d\n", name[4]);Das gibt Folgendes aus:
0Verwechsle %s und %c nicht: %s ist für eine ganze Zeichenkette, %c für ein Zeichen. Mit printf("%s\n", name[0]); lässt sich das Programm nicht kompilieren, und unter der Meldung schlägt Clang sogar den richtigen Formatbezeichner vor, %c:
char name[] = "Tina";
printf("%s\n", name[0]);main.c:5:20: error: format specifies type 'char *' but the argument has type 'char' [-Werror,-Wformat]Du kannst auch ein Zeichen ändern. Weise einem Element ein neues zu, wie bei jedem Array:
char name[] = "Tina";
name[0] = 'N';
printf("%s\n", name);Das gibt Folgendes aus:
NinaDas neue Zeichen steht in einfachen Anführungszeichen. name[0] = "N"; würde eine ganze Zeichenkette dort einsetzen, wo ein Zeichen hingehört, und du bekämst den Fehler über char[2] aus der vorherigen Übung.
Einfache Anführungszeichen sind auch in Bedingungen wichtig. Um den ersten Buchstaben zu prüfen, schreibe if (name[0] == 'N'). Mit doppelten Anführungszeichen, if (name[0] == "N"), lässt sich das Programm hier kompilieren, aber die Bedingung ist nie wahr, weil du ein Zeichen mit einer ganzen Zeichenkette vergleichst. Clang warnt davor, aber diese Seite zeigt keine Warnungen, du würdest also nur merken, dass das Programm nicht das tut, was es soll.
Die Größe des Arrays bleibt gleich. "Tina" hat Platz für 4 Buchstaben und das '\0', daher liegt name[5] = 's'; hinter dem Ende des Arrays, und das Programm lässt sich nicht kompilieren. Wie du Platz für einen längeren Text schaffst, siehst du später in dieser Lektion.
So schreibst du es:
Anweisungen
- 1
Gib das erste und das letzte Zeichen von
wortmit%cin einer Zeile aus, getrennt durch ein Leerzeichen. Die Ausgabe soll die ZeileM senthalten. - 2
Ändere darunter das erste Zeichen von
wortin'H'und gib das ganze Wort noch einmal mit%saus:Haus.