Zurück zu: C Tutorial
Zeichenketten
Zeichenketten werden zum Speichern von Text/Zeichen verwendet.
Beispielsweise ist „Hallo Welt“ eine Zeichenkette.
Im Gegensatz zu vielen anderen Programmiersprachen gibt es in C keinen String-Typ, mit dem sich String-Variablen einfach erstellen lassen. Stattdessen musst Du den char Typ verwenden und ein Array von Zeichen erstellen, um in C einen String zu erstellen:
char begruessung[] = "Hello World!";
Beachte, dass Sie doppelten Anführungszeichen ("") verwendet werden müssen.
Um den String auszugeben, kannst Du die Funktion printf() zusammen mit dem Formatbezeichner %s verwenden, um C mitzuteilen, dass wir jetzt mit Strings arbeiten:
Beispiel
char begruessung[] = "Hello World!";
printf("%s", begruessung);
Zugriff auf Zeichenketten
Da Zeichenketten in C eigentlich Arrays sind, kannst Du auf einzelne Zeichen innerhalb der Zeichenkette zugreifen, indem Du in eckigen Klammern [] auf ihre Indexnummer verweist.
Dieses Beispiel gibt das erste Zeichen (Zeichen mit Index 0) aus:
Beispiel
char begruessung[] = "Hello World!";
printf("%c", begruessung[0]);
Beachte, dass wir den Formatbezeichner
%cverwenden müssen, um ein einzelnes Zeichen auszugeben.
Zeichenketten ändern
Um den Wert eines bestimmten Zeichens in einer Zeichenkette zu ändern, verweist Du auf die Indexnummer und verwendest Du einfache Anführungszeichen:
Beispiel
char begruessung[] = "Hello World!";
begruessung[0] = 'J';
printf("%s", begruessung);
// Gibt aus Jello World! anstatt Hello World!
Eine Zeichenkette durchlaufen
Du kannst die Zeichen einer Zeichenkette auch mithilfe einer for-Schleife durchlaufen:
Beispiel
char autoName[] = "Volvo";
int i;
for (i = 0; i < 5; ++i) {
printf("%c\n", autoName[i]);
}
Und wie wir im Kapitel zu Arrays angegeben haben, kannst Du auch die sizeof()-Funktion verwenden (anstatt die Größe des Arrays manuell in die Schleifenbedingung (i < 5) zu schreiben), um die Schleife flexibler zu machen:
Beispiel
char autoName[] = "Volvo";
int length = sizeof(autoName) / sizeof(autoName[0]);
int i;
for (i = 0; i < length; ++i) {
printf("%c\n", autoName[i]);
}
Weitere Möglichkeit zum Erstellen von Zeichenketten
In den obigen Beispielen haben wir ein „String-Literal“ verwendet, um eine String-Variable zu erstellen. Dies ist die einfachste Möglichkeit, einen String in C zu erstellen.
Beachte auch, dass Du eine Zeichenkette mit einer Reihe von Zeichen erstellen kannst. Dieses Beispiel erzeugt dasselbe Ergebnis wie das Beispiel am Anfang dieser Seite:
Beispiel
char begruessung[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
printf("%s", begruessung);
Warum fügen wir am Ende das Zeichen
\0ein? Dies wird als „Null-Abschlusszeichen“ bezeichnet und muss beim Erstellen von Zeichenketten mit dieser Methode eingefügt werden. Es teilt C mit, dass dies das Ende der Zeichenkette ist.
Unterschiede
Der Unterschied zwischen den beiden Möglichkeiten zum Erstellen von Zeichenketten besteht darin, dass die erste Methode einfacher zu schreiben ist und Du das Zeichen \0 nicht einfügen musst, da C dies für Dich erledigt.
Beachte, dass die Größe beider Arrays gleich ist: sie haben beide 13 Zeichen (Leerzeichen zählen übrigens auch als Zeichen), einschließlich des Zeichens \0:
Beispiel
char begruessung[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
char begruessung2[] = "Hello World!";
printf("%lu\n", sizeof(begruessung)); // Outputs 13
printf("%lu\n", sizeof(begruessung2)); // Outputs 13
Beispiel aus dem echten Leben
Verwende Zeichenketten, um eine einfache Willkommensnachricht zu erstellen:
Beispiel
char nachricht[] = "Schoen dich zu sehen,";
char vname[] = "Hans";
printf("%s %s!", nachricht, vname);
Zeichenketten – Sonderzeichen
Da Zeichenketten in Anführungszeichen geschrieben werden müssen, wird C diese Zeichenkette falsch verstehen und einen Fehler generieren:
char txt[] = "Programmieren macht "Spass" - immer!";
Um dieses Problem zu vermeiden, musst Du das Escape-Zeichen „Backslash“ verwenden.
Das Escape-Zeichen „Backslash“ (\) wandelt Sonderzeichen in Zeichenfolgen um:
| Escape Zeichen | Ergebnis | Beschreibung |
|---|---|---|
| \‘ | ‚ | Einfaches Anführungszeichen |
| \“ | „ | Doppeltes Anführungszeichen |
| \\ | \ | Backslash |
Die Sequenz \" fügt ein doppeltes Anführungszeichen in einen String ein:
Beispiel
char txt[] = "Programmieren macht \"Spass\" - immer!";
Die Sequenz \' fügt ein einfaches Anführungszeichen in einen String ein:
Beispiel
char txt[] = "Geht\'s noch.";
Die Sequenz \\ fügt einen einzelnen Backslash in einen String ein:
Beispiel
char txt[] = "Das Zeichen \\ ist der sogenannte Backslash.";
Andere beliebte Escape-Zeichen in C sind:
| Escape Zeichen | Ergebnis |
|---|---|
| \n | Neue Zeile |
| \t | Tab |
| \0 | Null |
Zeichenkettenfunktionen
C verfügt auch über viele nützliche String-Funktionen, mit denen bestimmte Operationen an Strings ausgeführt werden können.
Um sie zu verwenden, musst Du die Header-Datei <string.h> in Dein Programm einbinden:
#include <string.h>
Zeichenkettenlänge
Um beispielsweise die Länge einer Zeichenkette zu ermitteln, kannst Du die Funktion strlen() verwenden:
Beispiel
char zeichenkette[] = "tdgekvhdtsze";
printf("%d", strlen(zeichenkette));
Im Kapitel für Arrays haben wir sizeof verwendet, um die Größe eines Strings/Arrays zu ermitteln. Beachte, dass sizeof und strlen sich unterschiedlich verhalten, da sizeof beim Zählen auch das Zeichen \0 berücksichtigt:
Beispiel
char zeichenkette[] = "tdgekvhdtsze";
printf("%d", strlen(zeichenkette)); // 12
printf("%d", sizeof(zeichenkette)); // 13
Es ist auch wichtig zu wissen, dass sizeof immer die Speichergröße (in Bytes) und nicht die tatsächliche Zeichenkettenlänge zurückgibt:
Beispiel
char zeichenkette[50] = "tdgekvhdtsze";
printf("%d", strlen(zeichenkette)); // 12
printf("%d", sizeof(zeichenkette)); // 50
Zeichenfolgen verketten
Um zwei Zeichenfolgen zu verketten (kombinieren), können Sie die Funktion strcat() verwenden:
Beispiel
char str1[20] = "Hello ";
char str2[] = "World!";
// Concatenate str2 to str1 (result is stored in str1)
strcat(str1, str2);
// Print str1
printf("%s", str1);
Beachten Sie, dass die Größe von
str1groß genug sein sollte, um das Ergebnis der beiden kombinierten Zeichenfolgen zu speichern (20 in unserem Beispiel).
Zeichenketten kopieren
Um den Wert einer Zeichenketten in eine andere zu kopieren, kannst Du die Funktion strcpy() verwenden:
Beispiel
char str1[20] = "Hello World!";
char str2[20];
// str1 in str2 kopieren
strcpy(str2, str1);
// str2 ausgeben
printf("%s", str2);
Beachte, dass die Größe von
str2groß genug sein sollte, um die kopierte Zeichenfolge zu speichern (20 in unserem Beispiel).
Strings vergleichen
Um zwei Zeichenketten zu vergleichen, kannst Du die Funktion strcmp() verwenden.
Es gibt 0 zurück, wenn die beiden Zeichenketten gleich sind, andernfalls einen Wert ungleich 0:
Beispiel
char str1[] = "Hallo";
char str2[] = "Hallo";
char str3[] = "Hallihallo";
// str1 und str2 vergleichen und Ergebnis ausgeben
printf("%d\n", strcmp(str1, str2)); // 0 (Strings sind gleich)
// str1 und str3 vergleichen und Ergebnis ausgeben
printf("%d\n", strcmp(str1, str3)); // -4 (Strings sind nicht gleich)