Strings

0

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 %c verwenden 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 \0 ein? 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 ZeichenErgebnisBeschreibung
\‘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 ZeichenErgebnis
\nNeue Zeile
\tTab
\0Null

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 str1 groß 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 str2 groß 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)
Nach oben scrollen