C Programlama

Dizi Karşılaştırma C Programlama

Dizi Karşılaştırma C Programlama
C dilinde bir dize, boş karakterle (\0) sonlandırılan bir karakter dizisidir. Bu özellik dizeleri kullanılarak karşılaştırılır.

İki dize çeşitli şekillerde karşılaştırılabilir. Bu öğreticide, önce iki diziyi karşılaştırmak için kullanıcı tanımlı bir fonksiyon göreceğiz ve ardından iki diziyi çok kolay bir şekilde karşılaştırmak için kullanılabilecek bazı yerleşik kütüphane fonksiyonlarını göreceğiz. Öyleyse başlayalım.

Kullanıcı tanımlı bir işlev kullanarak dize karşılaştırması:

bir fonksiyon yazacağız dizeKarşılaştır() dizeleri karşılaştırmak için. Dizeleri dolaşıyoruz ve herhangi birinin sonuna ulaşana kadar dizenin her karakterini karşılaştırıyoruz ya da her ikisi ya da bir uyumsuzluk bulunana kadar. Geçişe her iki dizenin sonuna ulaşılırsa, dizeler eşleştirilir; aksi takdirde, dizeler eşleşmez.

01. /*userDefinedFunction.c*/
02.
03. #Dahil etmek
04.
05. int stringCompare( char str1[ ], char str2[ ] )
06.
07. int i=0;
08.
09. while( str1[i] == str2[i] )
10.
11. if( str1[i] == '\0' || str2[i] == '\0' )
12. kırmak;
13. ben++;
14.
15.
16. if( str1[i] == '\0' && str2[i] == '\0' )
17. 0 döndür;
18. Başka
19. dönüş -1;
20.
21.
22.
23.
24. int ana()
25.
26. karakter str1[30],str2[30];
27.
28. printf("İlk diziyi giriniz: ");
29. scanf("%[^\n]%*c",str1);
30. printf("İkinci diziyi giriniz: ");
31. scanf("%[^\n]%*c",str2);
32.
33. if(stringCompare(str1,str2) == 0)
34. printf("Dizeler eşittir\n");
35. Başka
36. printf("Dizeler eşit değil\n");
37.
38. 0 döndür; 39.

Burada while döngüsü ve bir değişken kullanarak dizeleri geçiyoruz ben. Her iki dizenin aynı konumunda karakterler eşit olduğunda, değeri ben 1 artırılır (satır 13). Karakterler eşit değilse (satır 09) veya dizenin sonuna (satır 11) ulaşırsak, while döngüsü bir aradır. while döngüsünden sonra, her iki string geçişinin de sona ulaşıp ulaşmadığını kontrol ediyoruz (16. satır). Geçiş her iki dizenin sonuna kadar ulaşılırsa, dizeler eşittir, aksi takdirde olmaz.

Yerleşik kitaplık işlevlerini kullanarak dize karşılaştırması:

Dizi karşılaştırması için aşağıdaki kitaplık işlevleri kullanılabilir. Tüm işlevler, dize.h başlık dosyası.

strcmp() işlevi:

Bu işlev, işleve iletilen iki dizeyi karşılaştırır.

Sözdizimi:

int strcmp(const char *str1, const char *str2)

Geri dönüş değeri: Dizeler eşitse 0 döndür. İlk dizenin eşleşmeyen ilk karakterinin ASCII değeri ikinci dizeden küçükse negatif bir tamsayı döndür. İlk dizenin eşleşmeyen ilk karakterinin ASCII değeri ikinci dizeden büyükse pozitif bir tamsayı döndür. Bazı sistemler, ilk eşleşmeyen karakterin ASCII değerinin farkını döndürür ve bazı sistemler, ilk eşleşmeyen ilk karakterin ASCII değeri ikinci dizeden küçükse -1, eşleşmeyen ilk karakterin ASCII değeri ise 1 döndürür. ilk dize ikinci dizeden daha büyük.

Misal Geri dönüş değeri açıklama
strcmp( “Merhaba Dünya”, “Merhaba Dünya” ) 0 İki dizi aynı.
strcmp( “Merhaba”,”Merhaba\0 Dünya” ) 0 Dizeler '\0' karakterine kadar karşılaştırılır. İlk dize varsayılan olarak '\0' ile biter ve ikinci dize 'Merhaba'dan sonra '\0' karakterini içerir.
strcmp( “Merhaba\0\0\0",”Merhaba\0 Dünya” ) 0 Dizeler '\0' karakterine kadar karşılaştırılır.
strcmp( "Merhaba Dünya", "Merhaba Dünya" ) negatif tam sayı İlk dizenin ('H') ilk eşleşmeyen karakterinin ASCII değeri, ikinci dizeden ('h') küçük
strcmp(“Merhaba Dünya”, “Merhaba Dünya” ) Pozitif tamsayı İlk dizenin ('h') ilk eşleşmeyen karakterinin ASCII değeri, ikinci dizeden ('H') büyük

strncmp() işlevi:

Bu işlev, işleve benzer strcmp(), ama burada fonksiyona fazladan bir argüman ileterek kaç baytın karşılaştırılacağını belirtmeliyiz.

Sözdizimi:

int strncmp(const char *str1, const char *str2, size_t n)

Geri dönüş değeri: işlev döner 0 eğer ilk n iki dizenin karakterleri eşittir; aksi takdirde, ilk eşleşmeyen karakterin ASCII değeri arasındaki farkların işaretine bağlı olarak negatif veya pozitif tamsayı döndürür.

Misal Geri dönüş değeri açıklama
strncmp( “Merhaba Dünya”,”Merhaba Dünya”,5 ) 0 İlk 5 karakter aynı.
strncmp( “Merhaba”,”Merhaba\0 Dünya”,5 ) 0 İlk 5 karakter aynı.
strncmp( “Merhaba\0\0\0",”Merhaba\0 Dünya”,8 ) 0 '\0' her iki dizedeki ilk 5 karakterden sonra. Yani, karşılaştırma 8 değil 5'ten sonra durdurulur.
strncmp( “Merhaba Dünya”,”merhaba Dünya”,5 ) negatif tam sayı İlk dizenin ('H') ilk eşleşmeyen karakterinin ASCII değeri, ikinci dizeden ('h') küçük

strcasecmp() işlevi:

Bu işlev, işleve benzer strcmp(), ama burada dizeler büyük/küçük harfe duyarlı değildir.

Sözdizimi:

int strcasecmp(const char *str1, const char *str2)

Geri dönüş değeri: İle aynı strcmp(), ancak dizeler olarak kabul edilir büyük/küçük harfe duyarlı.

Misal Geri dönüş değeri açıklama
strcasecmp( “Merhaba Dünya”, “Merhaba Dünya” ) 0 İki dizi aynı.
strcasecmp( “Merhaba”,”Merhaba\0 Dünya” ) 0 Dizeler '\0' karakterine kadar karşılaştırılır. İlk dize varsayılan olarak '\0' ile biter ve ikinci dize 'Merhaba'dan sonra '\0' karakterini içerir.
strcasecmp( "Merhaba Dünya", "Merhaba Dünya" ) 0 Dizeler büyük/küçük harfe duyarlı. Yani, “Merhaba Dünya” ve “merhaba Dünya” aynı.

strncasecmp() işlevi:

Bu işlev, işleve benzer strncmp(), ama burada dizeler büyük/küçük harfe duyarlı değildir.

Sözdizimi:

int strncasecmp(const char *str1, const char *str2)

Geri dönüş değeri: İle aynı strncmp(), dizeler büyük/küçük harfe duyarlı olarak ele alındığında.

Misal Geri dönüş değeri açıklama
strncasecmp( “Merhaba Dünya”,”Merhaba Dünya”,5 ) 0 İlk 5 karakter aynı.
strncasecmp( “Merhaba”,”Merhaba\0 Dünya”,5 ) 0 İlk 5 karakter aynı.
strncasecmp( “Merhaba\0\0\0",”Merhaba\0 Dünya”,8 ) 0 '\0' her iki dizedeki ilk 5 karakterden sonra. Yani, karşılaştırma 8 değil 5'ten sonra durdurulur.
strncasecmp( “Merhaba Dünya”,”merhaba Dünya”,5 ) 0 Dizeler büyük/küçük harfe duyarlı. Yani, “Merhaba” ve “merhaba” aynı.

memcmp() işlevi:

Bu işlev iki bellek bloğunu bayt bayt karşılaştırır. Hafıza bloklarının iki işaretçisini ve karşılaştırılacak bayt sayısını geçmeliyiz.

Sözdizimi:

int memcmp(const void *str1, const void *str2, size_t n)

Geri dönüş değeri: İki bellek bloğu (n bayt) eşittir; aksi takdirde, eşleşmeyen ilk bayt çifti arasındaki farkları döndürür (baytlar, işaretsiz karakter nesneleri olarak yorumlanır, ardından int'ye yükseltilir).

Misal Geri dönüş değeri açıklama
memcmp( “Merhaba Dünya”,”Merhaba Dünya”,5 ) 0 İlk 5 karakter aynı.
memcmp( “Merhaba\0\0\0",”Merhaba\0 Dünya”,8 ) negatif tam sayı İlk 6 karakter aynı, ancak 7. karakter farklı. Burada karşılaştırma durdurulmadı strncmp() '\0' karakteri alınırken.
memcmp( “Merhaba Dünya”,”merhaba Dünya”,11 ) negatif tam sayı İlk dizenin ('H') ilk eşleşmeyen karakterinin ASCII değeri, ikinci dizeden ('h') küçük

Misal:

Aşağıda tartışılan tüm işlevlerin C kodu örneği verilmiştir.

01. /*stringKarşılaştır.c*/
02.
03. #Dahil etmek
04. #Dahil etmek
05.
06. int ana()
07.
08. printf("strcmp( "Merhaba Dünya", "Merhaba Dünya" ) => %d\n",strcmp( "Merhaba Dünya", "Merhaba Dünya" ));
09. printf("strcmp( "Merhaba","Merhaba\\0 Dünya") => %d\n",strcmp( "Merhaba","Merhaba\0 Dünya" ));
10. printf("strcmp( "Merhaba Dünya", "merhaba Dünya" ) => %d\n",strcmp( "Merhaba Dünya", "merhaba Dünya" ) );
11. printf("strcmp( "Merhaba\\0\0\\0","Merhaba\\0 Dünya") => %d\n",strcmp( "Merhaba\0\0\0","Merhaba\0 Dünya" ));
12.
13. printf("\n ---------------\n");
14.
15. printf("strncmp("Merhaba Dünya","Merhaba Dünya",5 ) => %d\n",strncmp( "Merhaba Dünya","Merhaba Dünya",5 ));
16. printf("strncmp( "Merhaba","Merhaba\\0 Dünya",5 ) => %d\n",strncmp( "Merhaba","Merhaba\0 Dünya",5 ));
17. printf("strncmp( "Merhaba\\0\\0\\0","Merhaba\\0 Dünya",8 ) => %d\n",strncmp( "Merhaba\0\0\0","Merhaba \0 Dünya",8 ));
18. printf("strncmp("Merhaba Dünya","merhaba Dünya",5 ) => %d\n",strncmp( "Merhaba Dünya","merhaba Dünya",5 ));
19.
20. printf("\n ---------------\n");
21.
22. printf("strcasecmp("Merhaba Dünya","Merhaba Dünya") => %d\n",strcasecmp( "Merhaba Dünya","Merhaba Dünya" ));
23. printf("strcasecmp( "Merhaba","Merhaba\\0 Dünya") => %d\n",strcasecmp( "Merhaba","Merhaba\0 Dünya" ));
24. printf("strcasecmp("Merhaba Dünya","merhaba Dünya") => %d\n",strcasecmp("Merhaba Dünya","merhaba Dünya" ));
25.
26. printf("\n ---------------\n");
27.
28. printf("strncasecmp( "Merhaba Dünya","Merhaba Dünya",5 ) => %d\n",strncasecmp( "Merhaba Dünya","Merhaba Dünya",5 ) );
29. printf("strncasecmp( "Merhaba","Merhaba\\0 Dünya",5 ) => %d\n",strncasecmp( "Merhaba","Merhaba\0 Dünya",5 ));
30. printf("strncasecmp( "Merhaba\\0\\0\\0","Merhaba\\0 Dünya",8 ) => %d\n",strncasecmp( "Merhaba\0\0\0","Merhaba \0 Dünya",8 ));
31. printf("strncasecmp("Merhaba Dünya","merhaba Dünya",5 ) => %d\n",strncasecmp( "Merhaba Dünya","merhaba Dünya",5 ));
32.
33. printf("\n ---------------\n");
34.
35. printf("memcmp( "Merhaba Dünya","Merhaba Dünya",5 ) => %d\n",memcmp( "Merhaba Dünya","Merhaba Dünya",5 ) );
36. printf("memcmp( "Merhaba\\0\0\\0","Merhaba\\0 Dünya",8 ) => %d\n",memcmp( "Merhaba\0\0\0","Merhaba \0 Dünya",8 ));
37. printf("memcmp("Merhaba Dünya","merhaba Dünya",11 ) => %d\n",memcmp( "Merhaba Dünya","merhaba Dünya",11 ));
38.
39. 0 döndür; 40.

Sonuç:

Bu derste, dizilerin çeşitli şekillerde nasıl karşılaştırılabileceğini gördük. Gördüğümüz gibi, stringCompare() işlevi, eşit olmayan dizeler için -1 döndürür, ancak bu, uyumsuz karakterin ASCII değerini döndürecek şekilde değiştirilebilir. Sizin için en uygun olanı kodunuzda kullanabilirsiniz.

Linux Oyuncuları için Faydalı Araçlar
Linux'ta oyun oynamayı seviyorsanız, oyun deneyimini geliştirmek için Wine, Lutris ve OBS Studio gibi uygulamaları ve yardımcı programları kullanmış o...
Daha Önce Bir Linux Sürümü Olmayan Linux için HD Remastered Oyunlar
Birçok oyun geliştiricisi ve yayıncısı, franchise'ın ömrünü uzatmak için eski oyunların HD remaster'ı ile geliyor, lütfen modern donanımla uyumluluk i...
Linux Oyunlarını Otomatikleştirmek için AutoKey Nasıl Kullanılır?
AutoKey, Linux ve X11 için Python 3, GTK ve Qt'de programlanmış bir masaüstü otomasyon aracıdır. Komut dosyası oluşturma ve MAKRO işlevselliğini kulla...