0Pricing
C Academy · Ders

strcmp ve Karşılaştırma

Dizgeleri karşılaştırma

strcmp ve Karşılaştırma, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

Dizeleri karşılaştırma

C dilinde dizeleri == ile karşılaştıramazsınız. Bu işlem içerikleri değil, yalnızca iki dizinin adreslerini karşılaştırır.

Karakterleri tek tek karşılaştırmak için <string.h> içindeki strcmp(a, b) işlevini kullanın.

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

strcmp ne döndürür

strcmp bir int döndürür:

  • Dizeler eşitse 0
  • a içindeki ilk farklı karakter b içindekinden küçükse negatif bir değer
  • Diğer durumlarda pozitif bir değer
#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;
}

Sıfırın eşit anlamına gelmesi tuzağı

Yaygın bir hata: eşit anlamına gelmesini bekleyerek if (strcmp(a, b)) yazmak.

strcmp eşit durumda 0 (yanlış) döndürür. Bu nedenle bu koşul, dizeler farklı olduğunda doğru olur. Eşitlik için her zaman açıkça 0 ile karşılaştırın.

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

Karşılaştırma nasıl çalışır

strcmp, karakterlerin ASCII (bayt) değerlerini, karakterler farklılaşana veya bir sonlandırıcıya ulaşılana kadar tek tek karşılaştırır.

Büyük harfler (A=65), küçük harflerden (a=97) önce gelir; bu nedenle "Zebra", "apple" ifadesinden önce sıralanır.

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

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

Sözlük sıralaması

strcmp işaretini kullanarak dizeleri alfabetik olarak sıralayabilirsiniz. Negatif sonuç, ilk bağımsız değişkenin sözlük sıralamasında daha önce geldiği anlamına gelir.

#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: sınırlı karşılaştırma

strncmp(a, b, n), en fazla n karakteri karşılaştırır. Bu, ön ekleri denetlemek için kullanışlıdır.

Örneğin bir dizenin "http" ile başlayıp başlamadığını sınayabilirsiniz.

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

Büyük-küçük harfe duyarsız karşılaştırma

Standart strcmp, büyük-küçük harfe duyarlıdır. Harf durumunu yok saymak için karşılaştırma sırasında <ctype.h> içindeki tolower ile karakterleri dönüştürebilirsiniz.

(POSIX sistemleri ayrıca strcasecmp sunar; ancak bu işlev C standardında yer almaz.)

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

Karşılaştırmayla arama

Dizelerden oluşan bir dizi üzerinde döngü kurup basit bir arama tablosu gibi eşleşme bulmak için strcmp kullanabilirsiniz.

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

Dizeleri sıralama

strcmp işlevini temel alarak dize dizilerini sıralayabilirsiniz. Aşağıda, sıralama düzenine göre işaretçileri yer değiştiren küçük bir kabarcık sıralaması gösterilmiştir.

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

Doğrudan çıkarma ile karşılaştırmayın

a[i] - b[i] kullanarak kendi karşılaştırmanızı yazmayı deneyebilirsiniz; ancak ham char değerlerinde işaret davranışı uygulamaya bağlıdır ve taşma oluşabilir.

Bu sınır durumlarını doğru biçimde ele alan kütüphane işlevi strcmp'i tercih edin.

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

Kullanıcı girdisini karşılaştırma

Gerçek hayattaki bir kullanım, parola veya menü seçimini denetlemektir. Girdiyi okuyun, ardından strcmp ile beklenen değerlerle karşılaştırın.

Eşitliği sınamak için her zaman 0 ile karşılaştırın.

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

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

Kısa kontrol

strcmp dönüş değerleri konusundaki anlayışınızı sınayın.

Özet

C dilinde dizeleri nasıl karşılaştıracağınızı öğrendiniz:

  • strcmp, eşitlik için 0; sıralama için negatif veya pozitif değer döndürür.
  • Dizelerde hiçbir zaman == kullanmayın; bu işlem adresleri karşılaştırır.
  • Eşitlik için her zaman == 0 koşulunu sınayın (sıfırın yanlış sayılması tuzağı).
  • strncmp bir ön eki karşılaştırır; büyük-küçük harfe duyarsız karşılaştırma için tolower gerekir.

Sıkça Sorulan Sorular

“strcmp ve Karşılaştırma” dersi ücretsiz mi?

Evet — “strcmp ve Karşılaştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“strcmp ve Karşılaştırma” dersinde ne öğreneceğim?

Dizgeleri karşılaştırma C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“strcmp ve Karşılaştırma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. strlen, strcpy, strcat
  2. strcmp ve Karşılaştırma
  3. strtok ve Belirteçlere Ayırma
  4. memcpy ve memset
← C Academy Sayfasına Dön