Länge einer Zeichenkette
Wie viele Zeichen hat eine Zeichenkette? sizeof ist nicht die Antwort: Es liefert die Größe des ganzen Arrays, einschließlich des '\0', und später in dieser Lektion siehst du Arrays, die mehr Platz haben, als ihr Text braucht. C hat dafür eine fertige Funktion. Eine Funktion ist ein Stück Code mit einem Namen, das eine Aufgabe erledigt. Du verwendest sie, indem du ihren Namen und in Klammern schreibst, womit sie arbeiten soll. Auch printf ist eine Funktion.
Die Funktionen für Zeichenketten stehen in der Bibliothek string.h. Eine Bibliothek ist eine Sammlung fertiger Funktionen. Um sie zu verwenden, bindest du ihre Header-Datei oben im Programm ein, so wie du stdio.h für printf einbindest:
#include <stdio.h>
#include <string.h>
int main(void) {
char name[] = "Anna";
int laenge = strlen(name);
printf("%s hat %d Buchstaben\n", name, laenge);
return 0;
}Das gibt Folgendes aus:
Anna hat 4 BuchstabenDie Funktion strlen (string length, Länge der Zeichenkette) zählt die Zeichen vor dem Nullzeichen; das '\0' selbst zählt nicht mit. Leerzeichen und Satzzeichen sind auch Zeichen, "Hallo, Tom!" hat also die Länge 11. Wenn du #include <string.h> vergisst, beginnt die Fehlermeldung mit call to undeclared library function 'strlen', und die Notiz darunter sagt dir, welche Header-Datei du einbinden musst.
Warum speicherst du die Länge zuerst in der Variablen laenge? Du könntest versucht sein, strlen direkt in printf zu schreiben, aber dann lässt sich das Programm nicht kompilieren:
char name[] = "Anna";
printf("%d\n", strlen(name));main.c:6:20: error: format specifies type 'int' but the argument has type '__size_t' (aka 'unsigned long') [-Werror,-Wformat]strlen liefert ihr Ergebnis als eine andere Art ganzer Zahl, size_t, die nicht negativ sein kann, und %d ist nur für int. Wenn du das Ergebnis in einer int-Variablen speicherst, wird es in int umgewandelt, und %d passt. (Unter der Meldung schlägt Clang %zu vor, den Formatbezeichner für size_t. Das funktioniert auch.)
Mit der Länge findest du das letzte Zeichen. Es steht beim Index laenge - 1, denn Indizes beginnen bei 0. Beim Index laenge steht das '\0':
char name[] = "Anna";
int laenge = strlen(name);
printf("Letzter Buchstabe: %c\n", name[laenge - 1]);Das gibt Folgendes aus:
Letzter Buchstabe: aVorsicht bei Umlauten und dem ß, also bei ä, ö, ü und ß. Text wird in der Kodierung UTF-8 gespeichert, und in ihr belegt ein solcher Buchstabe zwei char:
int laenge = strlen("Käse");
printf("%d\n", laenge);Das gibt Folgendes aus:
5"Käse" hat vier Buchstaben, aber fünf char: Das ä besteht aus zwei davon, und jedes einzeln ist nur ein halber Buchstabe. Texte mit Umlauten kannst du problemlos ausgeben, aber schreibe die Zeichenketten, die du Zeichen für Zeichen bearbeitest, ohne Umlaute und ß.
So schreibst du es:
Anweisungen
- 1
Füge oben im Programm
#include <string.h>hinzu. Speichere unter demprintfdie Länge vonstadtmitstrlenin einerint-Variablenlaengeund gib sie so aus, dass die Ausgabe die ZeileBuchstaben: 9enthält. - 2
Gib dann den letzten Buchstaben der Stadt,
stadt[laenge - 1], mit%caus:Letzter Buchstabe: t.