0Pricing
C Academy · Lektion

strcmp und Vergleiche

Strings vergleichen

strcmp und Vergleiche ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Zeichenketten vergleichen

In C können Sie Zeichenketten nicht mit == vergleichen. Damit werden nur die Adressen zweier Arrays verglichen, nicht deren Inhalte.

Verwenden Sie strcmp(a, b) aus <string.h>, um die Zeichen einzeln zu vergleichen.

#include <stdio.h>
#include <string.h>

int main(void) {
    char a[] = "apple";
    char b[] = "apple";
    if (strcmp(a, b) == 0)
        printf("Strings are equal\n");
    return 0;
}

Was strcmp zurückgibt

strcmp gibt einen Wert vom Typ int zurück:

  • 0, wenn die Zeichenketten gleich sind
  • einen negativen Wert, wenn das erste unterschiedliche Zeichen in a kleiner ist als das in b
  • andernfalls einen positiven Wert
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("abc", "abc"));
    printf("%d\n", strcmp("abc", "abd"));
    printf("%d\n", strcmp("abd", "abc"));
    return 0;
}

Die Falle bei „0 bedeutet gleich“

Ein häufiger Fehler ist, if (strcmp(a, b)) zu schreiben und damit Gleichheit ausdrücken zu wollen.

Denken Sie daran, dass strcmp bei Gleichheit 0 zurückgibt, also einen falschen Wert. Die Bedingung ist daher wahr, wenn sich die Zeichenketten unterscheiden. Vergleichen Sie immer ausdrücklich mit 0.

#include <stdio.h>
#include <string.h>

int main(void) {
    char input[] = "yes";
    if (strcmp(input, "yes") == 0)
        printf("Confirmed\n");
    else
        printf("Not confirmed\n");
    return 0;
}

So funktioniert der Vergleich

strcmp vergleicht die ASCII- (Byte-)Werte der Zeichen nacheinander, bis sie sich unterscheiden oder ein Terminator erreicht ist.

Großbuchstaben (A=65) kommen vor Kleinbuchstaben (a=97), daher wird "Zebra" vor "apple" sortiert.

#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("Zebra", "apple"));
    return 0;
}

Lexikografische Reihenfolge

Anhand des Vorzeichens von strcmp können Sie Zeichenketten alphabetisch sortieren. Ein negatives Ergebnis bedeutet, dass das erste Argument in der Wörterbuchreihenfolge früher kommt.

#include <stdio.h>
#include <string.h>

int main(void) {
    const char *x = "banana";
    const char *y = "cherry";
    if (strcmp(x, y) < 0)
        printf("%s comes before %s\n", x, y);
    return 0;
}

strncmp: Vergleich mit Begrenzung

strncmp(a, b, n) vergleicht höchstens n Zeichen. Das ist nützlich, um Präfixe zu prüfen.

Sie können beispielsweise testen, ob eine Zeichenkette mit "http" beginnt.

#include <stdio.h>
#include <string.h>

int main(void) {
    char url[] = "https://site.com";
    if (strncmp(url, "https", 5) == 0)
        printf("Secure URL\n");
    return 0;
}

Vergleich ohne Beachtung der Groß-/Kleinschreibung

Das Standardverhalten von strcmp unterscheidet zwischen Groß- und Kleinschreibung. Um diese zu ignorieren, können Sie beim Vergleichen die Zeichen mit tolower aus <ctype.h> umwandeln.

(POSIX-Systeme bieten außerdem strcasecmp, diese Funktion gehört jedoch nicht zum C-Standard.)

#include <stdio.h>
#include <ctype.h>

int ci_cmp(const char *a, const char *b) {
    while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
    return tolower(*a) - tolower(*b);
}

int main(void) {
    printf("%d\n", ci_cmp("Hello", "hello"));
    return 0;
}

Suchen durch Vergleichen

Sie können ein Array von Zeichenketten durchlaufen und mit strcmp nach einer Übereinstimmung suchen, ähnlich wie bei einer einfachen Nachschlagetabelle.

#include <stdio.h>
#include <string.h>

int main(void) {
    const char *fruits[] = {"apple", "banana", "cherry"};
    const char *target = "banana";
    for (int i = 0; i < 3; i++) {
        if (strcmp(fruits[i], target) == 0) {
            printf("Found at index %d\n", i);
        }
    }
    return 0;
}

Zeichenketten sortieren

Mit strcmp als Vergleichsfunktion können Sie Arrays von Zeichenketten sortieren. Hier sehen Sie einen kleinen Bubble-Sort, der Zeiger entsprechend der Reihenfolge vertauscht.

#include <stdio.h>
#include <string.h>

int main(void) {
    const char *names[] = {"Carol", "Alice", "Bob"};
    int n = 3;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (strcmp(names[j], names[j+1]) > 0) {
                const char *t = names[j];
                names[j] = names[j+1];
                names[j+1] = t;
            }
    for (int i = 0; i < n; i++) printf("%s\n", names[i]);
    return 0;
}

Nicht direkt durch Subtraktion vergleichen

Vielleicht versuchen Sie, Ihren eigenen Vergleich mit a[i] - b[i] zu schreiben. Bei rohen char-Werten ist das Verhalten des Vorzeichens jedoch implementierungsabhängig, und es kann zu einem Überlauf kommen.

Verwenden Sie vorzugsweise die Bibliotheksfunktion strcmp, die diese Sonderfälle korrekt behandelt.

#include <stdio.h>
#include <string.h>

int main(void) {
    int r = strcmp("file1", "file2");
    printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
    return 0;
}

Benutzereingaben vergleichen

Eine praktische Anwendung ist das Überprüfen eines Passworts oder einer Menüauswahl. Lesen Sie die Eingabe ein und vergleichen Sie sie anschließend mit den erwarteten Werten mithilfe von strcmp.

Vergleichen Sie immer mit 0, um auf Gleichheit zu prüfen.

#include <stdio.h>
#include <string.h>

int main(void) {
    char choice[] = "quit";
    if (strcmp(choice, "quit") == 0)
        printf("Exiting program\n");
    return 0;
}

Schnelltest

Testen Sie Ihr Verständnis der Rückgabewerte von strcmp.

Zusammenfassung

Sie haben gelernt, Zeichenketten in C zu vergleichen:

  • strcmp gibt bei Gleichheit 0 zurück, zur Sortierreihenfolge einen negativen oder positiven Wert.
  • Verwenden Sie niemals == für Zeichenketten; damit werden Adressen verglichen.
  • Prüfen Sie Gleichheit immer mit == 0 (die Falle „0 ist falsch“).
  • strncmp vergleicht ein Präfix; für einen Vergleich ohne Beachtung der Groß-/Kleinschreibung benötigen Sie tolower.

Häufig gestellte Fragen

Ist die Lektion „strcmp und Vergleiche“ kostenlos?

Ja — der vollständige Text von „strcmp und Vergleiche“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „strcmp und Vergleiche“?

Strings vergleichen Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C Academy zu starten?

Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „strcmp und Vergleiche“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?

Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. strlen, strcpy, strcat
  2. strcmp und Vergleiche
  3. strtok und Tokenizing
  4. memcpy und memset
← Zurück zu C Academy