Menu
Coddy logo textTech

strcmp() Kullanımı

Coddy'nin C Journey'sinin Mantık & Akış 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() işlevini kullanarak basit bir parola doğrulama sistemi uygulayan bir C programı yazın. Programınız şunları yapmalıdır:

  1. İşlenecek giriş denemelerinin sayısını temsil eden bir tamsayı n okuyun
  2. Her giriş denemesi için:
    • Girdiden bir kullanıcı adı okuyun
    • Girdiden bir parola okuyun
    • Kullanıcı adını "admin" ile karşılaştırmak için strcmp() kullanın
    • Parolayı "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ç başarılı giriş gerçekleştiğini sayın ve görüntüleyin

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

  • Kullanıcı adı ve parola doğruysa: "Login successful" yazdırın
  • Kullanıcı adı doğru ancak parola yanlışsa: "Invalid password" yazdırın
  • Kullanıcı adı yanlış ancak parola doğruysa: "Invalid username" yazdırın
  • Kullanıcı adı ve parola yanlışsa: "Invalid credentials" yazdırın

<string.h> işlevini kullanmak için strcmp() başlığını eklemeyi unutmayın.

Çıktınız aşağıdaki biçimde sonuçları 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 görev, dizeleri eşitlik açısından karşılaştırmak için strcmp() kullanma, dizi 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ı sınar.

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.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi