Strings

0

Saiten

Zeichenfolgen werden zum Speichern von Text/Zeichen verwendet.

Beispielsweise ist „Hallo Welt“ eine Zeichenfolge.

Im Gegensatz zu vielen anderen Programmiersprachen gibt es in C keinen String Typ, mit dem sich String-Variablen einfach erstellen lassen. Stattdessen müssen Sie den char Typ verwenden und ein Array von Zeichen erstellen, um in C einen String zu erstellen:

char greetings[] = "Hello World!";

Beachten Sie, dass Sie doppelte Anführungszeichen ("") verwenden müssen.

Um den String auszugeben, können Sie die Funktion printf() zusammen mit dem Formatbezeichner %s verwenden, um C mitzuteilen, dass wir jetzt mit Strings arbeiten:

Beispiel

char greetings[] = "Hello World!";
printf("%s", greetings);

Zugriffszeichenfolgen

Da Zeichenfolgen in C eigentlich Arrays sind, können Sie auf eine Zeichenfolge zugreifen, indem Sie in eckigen Klammern [] auf ihre Indexnummer verweisen.

Dieses Beispiel druckt das erste Zeichen (0) in Grüßen:

Beispiel

char greetings[] = "Hello World!";
printf("%c", greetings[0]);

Beachten Sie, dass wir den Formatbezeichner %c verwenden müssen, um ein einzelnes Zeichen zu drucken.

Zeichenfolgen ändern

Um den Wert eines bestimmten Zeichens in einer Zeichenfolge zu ändern, verweisen Sie auf die Indexnummer und verwenden Sie einfache Anführungszeichen:

Beispiel

char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// Outputs Jello World! instead of Hello World!

Durchlaufen einer Zeichenfolge

Sie können die Zeichen einer Zeichenfolge auch mithilfe einer For Schleife durchlaufen:

Beispiel

char carName[] = "Volvo";
int i;

for (i = 0; i < 5; ++i) {
  printf("%c\n", carName[i]);
}

Und wie wir im Kapitel zu Arrays angegeben haben, können Sie auch die sizeof-Formel verwenden (anstatt die Größe des Arrays manuell in die Schleifenbedingung (i < 5) zu schreiben), um die Schleife nachhaltiger zu machen:

Beispiel

char carName[] = "Volvo";
int length = sizeof(carName) / sizeof(carName[0]);
int i;

for (i = 0; i < length; ++i) {
  printf("%c\n", carName[i]);
}

Eine andere Möglichkeit zum Erstellen von Zeichenfolgen

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.

Beachten Sie auch, dass Sie eine Zeichenfolge mit einer Reihe von Zeichen erstellen können. Dieses Beispiel erzeugt dasselbe Ergebnis wie das Beispiel am Anfang dieser Seite:

Beispiel

char greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
printf("%s", greetings);

Warum fügen wir am Ende das Zeichen \0 ein? Dies wird als „Null-Abschlusszeichen“ bezeichnet und muss beim Erstellen von Zeichenfolgen mit dieser Methode eingefügt werden. Es teilt C mit, dass dies das Ende der Zeichenfolge ist.

Unterschiede

Der Unterschied zwischen den beiden Möglichkeiten zum Erstellen von Zeichenfolgen besteht darin, dass die erste Methode einfacher zu schreiben ist und Sie das Zeichen \0 nicht einfügen müssen, da C dies für Sie erledigt.

Beachten Sie, 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 greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
char greetings2[] = "Hello World!";

printf("%lu\n", sizeof(greetings));   // Outputs 13
printf("%lu\n", sizeof(greetings2));  // Outputs 13

Beispiel aus dem echten Leben

Verwenden Sie Zeichenfolgen, um eine einfache Willkommensnachricht zu erstellen:

Beispiel

char message[] = "Good to see you,";
char fname[] = "John";

printf("%s %s!", message, fname);

Zeichenfolgen – Sonderzeichen

Da Zeichenfolgen in Anführungszeichen geschrieben werden müssen, wird C diese Zeichenfolge falsch verstehen und einen Fehler generieren:

char txt[] = "We are the so-called "Vikings" from the north.";

Um dieses Problem zu vermeiden, können Sie 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[] = "We are the so-called \"Vikings\" from the north.";

Die Sequenz \' fügt ein einfaches Anführungszeichen in einen String ein:

Beispiel

char txt[] = "It\'s alright.";

Die Sequenz \\ fügt einen einzelnen Backslash in einen String ein:

Beispiel

char txt[] = "The character \\ is called backslash.";

Andere beliebte Escape-Zeichen in C sind:

Escape ZeichenErgebnis
\nNeue Zeile
\tTab
\0Null

Zeichenfolgenfunktionen

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, müssen Sie die Header-Datei <string.h> in Ihr Programm einbinden:

#include <string.h>

Zeichenfolgenlänge

Um beispielsweise die Länge einer Zeichenfolge zu ermitteln, können Sie die Funktion strlen() verwenden:

Beispiel

char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet));

Im Kapitel Strings haben wir sizeof verwendet, um die Größe eines Strings/Arrays zu ermitteln. Beachten Sie, dass sizeof und strlen sich unterschiedlich verhalten, da sizeof beim Zählen auch das Zeichen \0 berücksichtigt:

Beispiel

char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet));   // 26
printf("%d", sizeof(alphabet));   // 27

Es ist auch wichtig zu wissen, dass sizeof immer die Speichergröße (in Bytes) und nicht die tatsächliche Zeichenfolgenlänge zurückgibt:

Beispiel

char alphabet[50] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet));   // 26
printf("%d", sizeof(alphabet));   // 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).

Zeichenfolgen kopieren

Um den Wert einer Zeichenfolge in eine andere zu kopieren, können Sie die Funktion strcpy() verwenden:

Beispiel

char str1[20] = "Hello World!";
char str2[20];

// Copy str1 to str2
strcpy(str2, str1);

// Print str2
printf("%s", str2);

Beachten Sie, dass die Größe von str2 groß genug sein sollte, um die kopierte Zeichenfolge zu speichern (20 in unserem Beispiel).

Saiten vergleichen

Um zwei Zeichenfolgen zu vergleichen, können Sie die Funktion strcmp() verwenden.

Es gibt 0 zurück, wenn die beiden Zeichenfolgen gleich sind, andernfalls einen Wert ungleich 0:

Beispiel

char str1[] = "Hello";
char str2[] = "Hello";
char str3[] = "Hi";

// Compare str1 and str2, and print the result
printf("%d\n", strcmp(str1, str2));  // Returns 0 (the strings are equal)

// Compare str1 and str3, and print the result
printf("%d\n", strcmp(str1, str3));  // Returns -4 (the strings are not equal)
Nach oben scrollen