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.
Görev
Kolaystrcmp() işlevini kullanarak basit bir parola doğrulama sistemi uygulayan bir C programı yazın. Programınız şunları yapmalıdır:
- İşlenecek giriş denemelerinin sayısını temsil eden bir tamsayı
nokuyun - 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
- 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: 1Bu 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;
}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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String FonksiyonlarıKendi başına pratik yap: Online C derleyicisi