C Academy · leksjon

strcmp og sammenligning

Sammenligne strenger

Leksjon 2 av 413 trinn

strcmp og sammenligning er en gratis leksjon i C Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C Academy inneholder totalt 4 leksjoner.

Sammenligne strenger

Du kan ikke sammenligne strenger med == i C. Det sammenligner bare adressene til to arrayer, ikke innholdet deres.

Bruk strcmp(a, b) fra <string.h> for å sammenligne tegn for tegn.

#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;
}

Hva strcmp returnerer

strcmp returnerer en int:

  • 0 hvis strengene er like
  • en negativ verdi hvis det første tegnet som er forskjellig i a, er mindre enn det tilsvarende tegnet i b
  • en positiv verdi ellers
#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;
}

Fellen med at null betyr lik

En vanlig feil er å skrive if (strcmp(a, b)) i forventning om at det skal bety at strengene er like.

Husk at strcmp returnerer 0 (usant) når strengene er like, så betingelsen er sann når de er forskjellige. Sammenlign alltid eksplisitt med 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;
}

Slik fungerer sammenligningen

strcmp sammenligner ASCII- (byte-)verdiene til tegnene ett om gangen til de er forskjellige, eller til en terminator nås.

Store bokstaver (A=65) kommer før små bokstaver (a=97), så "Zebra" sorteres før "apple".

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

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

Leksikografisk rekkefølge

Fortegnet til strcmp lar deg sortere strenger alfabetisk. Et negativt resultat betyr at det første argumentet kommer tidligere i ordbokrekkefølge.

#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: begrenset sammenligning

strncmp(a, b, n) sammenligner maksimalt n tegn. Dette er nyttig når du vil kontrollere prefikser.

Du kan for eksempel teste om en streng begynner med "http".

#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;
}

Sammenligning uten hensyn til store og små bokstaver

Standardfunksjonen strcmp skiller mellom store og små bokstaver. Hvis du vil ignorere dette, kan du konvertere tegn med tolower fra <ctype.h> mens du sammenligner.

(POSIX-systemer tilbyr også strcasecmp, men den er ikke en del av C-standarden.)

#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;
}

Søke med sammenligning

Du kan gå gjennom en rekke strenger og bruke strcmp for å finne et samsvar, omtrent som i en enkel oppslagstabell.

#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;
}

Sortere strenger

Med strcmp som grunnlag kan du sortere strengarrayer. Her er en liten boblesortering som bytter pekere basert på rekkefølge.

#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;
}

Ikke sammenlign direkte med subtraksjon

Du kan bli fristet til å skrive din egen sammenligning med a[i] - b[i], men med rå char-verdier er fortegnsoppførselen implementasjonsavhengig, og det kan oppstå overløp.

Foretrekk bibliotekfunksjonen strcmp, som håndterer disse spesialtilfellene korrekt.

#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;
}

Sammenligne brukerinndata

Et praktisk eksempel er å kontrollere et passord eller et menyvalg. Les inndata, og sammenlign den deretter med forventede verdier ved hjelp av strcmp.

Sammenlign alltid med 0 når du skal teste om verdiene er like.

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

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

Hurtigsjekk

Test forståelsen din av returverdiene til strcmp.

Oppsummering

Du har lært hvordan du sammenligner strenger i C:

  • strcmp returnerer 0 for like strenger, og en negativ eller positiv verdi for rekkefølgen.
  • Bruk aldri == på strenger; det sammenligner adresser.
  • Test alltid == 0 for likhet (fellen med at null er usant).
  • strncmp sammenligner et prefiks; sammenligning uten hensyn til store og små bokstaver krever tolower.
Gratis å komme i gang

Lær deg C med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
144

Ofte stilte spørsmål

Er leksjonen «strcmp og sammenligning» gratis?

Ja – hele teksten i «strcmp og sammenligning» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «strcmp og sammenligning»?

Sammenligne strenger Du øver på C Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C Academy?

Ingen tidligere erfaring er nødvendig. C Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «strcmp og sammenligning»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C Academy-leksjonen?

Ja. Alle C Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. strlen, strcpy, strcat
  2. strcmp og sammenligning
  3. strtok og tokenisering
  4. memcpy og memset
← Tilbake til C Academy