Menu
Coddy logo textTech

strcmp() Kullanımı

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 18 / 63.

Dizeleri strcat() ile nasıl birleştireceğinizi öğrendiniz, ancak iki dizenin tam olarak aynı metni içerip içermediğini belirlemeniz gerekirse ne olur? C'de, dizeleri karşılaştırmak için eşittir operatörünü (==) kullanamazsınız çünkü bu operatör gerçek içeriği değil, yalnızca bellek adreslerini karşılaştırır.

<string.h> kütüphanesindeki strcmp() fonksiyonu, iki dizeyi karakter karakter karşılaştırarak bu sorunu çözer. Bu fonksiyon, sözlüksel karşılaştırma (lexicographical comparison) olarak adlandırılan işlemi gerçekleştirir; yani temel olarak dizeleri sözlük sırasına göre karşılaştırır.

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

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // 0 döndürür (dizeler eşittir)

strcmp() fonksiyonu üç farklı türde değer döndürür: dizeler özdeşse 0, ilk dize alfabetik olarak ikinciden önce geliyorsa negatif bir değer ve ilk dize alfabetik olarak ikinciden sonra geliyorsa pozitif bir değer döndürür.

Bu fonksiyon; kullanıcı girişini doğrulamak, metin verilerini sıralamak veya programlarınızda arama işlevselliği uygulamak gibi dize içeriğine dayalı kararlar vermek için gereklidir.

challenge icon

Görev

Kolay

strcmp() fonksiyonunu kullanarak basit bir şifre doğrulama sistemi uygulayan bir C programı yazın. Programınız şunları yapmalıdır:

  1. İşlenecek giriş denemesi sayısını temsil eden bir n tam sayısını okuyun
  2. Her giriş denemesi için:
    • Girdiden bir kullanıcı adı okuyun
    • Girdiden bir şifre okuyun
    • Kullanıcı adını "admin" ile karşılaştırmak için strcmp() kullanın
    • Şifreyi "secret123" ile karşılaştırmak için strcmp() kullanın
    • Karşılaştırma sonuçlarına göre uygun mesajı yazdırın
  3. Tüm denemeleri işledikten sonra, kaç tane başarılı giriş yapıldığını sayın ve görüntüleyin

Giriş doğrulama mantığı şu şekilde olmalıdır:

  • Hem kullanıcı adı hem de şifre doğruysa: "Login successful" yazdırın
  • Kullanıcı adı doğru ancak şifre yanlışsa: "Invalid password" yazdırın
  • Kullanıcı adı yanlış ancak şifre doğruysa: "Invalid username" yazdırın
  • Hem kullanıcı adı hem de şifre yanlışsa: "Invalid credentials" yazdırın

strcmp() fonksiyonunu kullanmak için <string.h> başlık dosyasını eklemeyi unutmayın.

Çıktınız sonuçları aşağıdaki formatta görüntülemelidir:

[Login result message]
[Login result message]
...
Total successful logins: [count]

Örneğin, girdi şu şekildeyse:

4
admin
secret123
user
password
admin
wrong
guest
secret123

Çıktınız şu şekilde olmalıdır:

Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1

Bu meydan okuma, dizeleri eşitlik için karşılaştırmak üzere strcmp() kullanma, dize karşılaştırma sonuçlarına dayalı koşullu mantık uygulama ve karşılaştırma sonuçlarına göre oluşumları sayma konusundaki anlayışınızı test eder.

Kopya kağıdı

<string.h> kütüphanesindeki strcmp() fonksiyonu, iki dizeyi sözlüksel karşılaştırma kullanarak karakter karakter karşılaştırır:

#include <string.h>

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);

strcmp() şunları döndürür:

  • Dizeler özdeşse 0
  • İlk dize alfabetik olarak ikinciden önce geliyorsa negatif değer
  • İlk dize alfabetik olarak ikinciden sonra geliyorsa pozitif değer

C'de dizeleri karşılaştırmak için == kullanılamaz; çünkü bu operatör içeriği değil, yalnızca bellek adreslerini karşılaştırır.

Kendin dene

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

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: Kodunuzu buraya yazın
    // strcmp() fonksiyonunu kullanarak her giriş denemesini işleyin
    // Kullanıcı adını "admin" ve şifreyi "secret123" ile karşılaştırın
    // Uygun mesajları yazdırın ve başarılı girişleri sayın
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler