Dizi Karşılaştırma: C Programlama

String Comparison C Programming



C dilinde bir dize, bir boş karakterle () sonlandırılan bir karakter dizisidir. Bu özellik kullanılarak dizeler karşılaştırılır.







İki dizi ç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 veya her ikisi ya da bir eşleşmeyen var. Geçişe her iki dizenin sonuna ulaşılırsa, dizeler eşleştirilir; aksi takdirde, dizeler uyumsuzdur.



01./*userDefinedFunction.c*/
02.
03.#Dahil etmek
04.
05.intdizeKarşılaştır( karakterstr1[ ], karakterstr2[ ] )
06.{
07.intben=0;
08.
09. süre(str1[ben] ==str2[ben] )
10.
on beş.
16.Eğer(str1[ben] == ' 0' &&str2[ben] == ' 0' )
17.dönüş 0;
18.Başka
19.dönüş -1;
yirmi.
yirmi bir.}
22.
2. 3.
24.intana()
25.{
26.karakterstr1[30],str2[30];
27.
28. baskı ('İlk dizeyi girin:');
29. tarama ('% [^ ]% * C ',str1);
30. baskı ('İkinci dizeyi girin:');
31. tarama ('% [^ ]% * C ',str2);
32.
33.Eğer(dizeKarşılaştır(str1,str2) == 0)
3. 4. baskı ('İpler eşit ');
35.Başka
36. baskı ('Dizeler eşit değil ');
37.
38.dönüş 0; 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 sonuna ulaşılıp ulaşılmadığını kontrol ederiz (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 karakter *str1, const karakter *str2)

Geri dönüş değeri: Dizeler eşitse 0 döndürün. İlk dizenin eşleşmeyen ilk karakterinin ASCII değeri ikinci dizeden küçükse, negatif bir tamsayı döndürün. İlk dizenin eşleşmeyen ilk karakterinin ASCII değeri ikinci dizeden büyükse, pozitif bir tamsayı döndürün. 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.

Örnek Geri dönüş değeri Açıklama
strcmp( Merhaba Dünya, Merhaba Dünya ) 0 İki dize aynıdır.
strcmp( Merhaba, Merhaba Dünya ) 0 Dizeler '' karakterine kadar karşılaştırılır. İlk dize varsayılan olarak '' ile biter ve ikinci dize 'Merhaba'dan sonra '' karakterini içerir.
strcmp( Merhaba″,Merhaba Dünya ) 0 Dizeler '' 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') eşleşmeyen ilk karakterinin ASCII değeri, ikinci dizeden ('H') büyük

strncmp() işlevi:

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

Sözdizimi:

int strncmp (const karakter *str1, const karakter *str2, size_tn)

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

Örnek Geri dönüş değeri Açıklama
strncmp( Merhaba Dünya,Merhaba Dünya,5 ) 0 İlk 5 karakter aynı.
strncmp( Merhaba,Merhaba Dünya,5 ) 0 İlk 5 karakter aynı.
strncmp( Merhaba″,Merhaba Dünya,8 ) 0 '', her iki dizedeki ilk 5 karakterden sonra gelir. Yani karşılaştırma 8'den 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() , ancak burada dizeler büyük/küçük harfe duyarlı değildir.

Sözdizimi:

intstrcasecmp(const karakter *str1, const karakter *str2)

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

Örnek Geri dönüş değeri Açıklama
strcasecmp( Merhaba Dünya, Merhaba Dünya ) 0 İki dize aynıdır.
strcasecmp( Merhaba, Merhaba Dünya ) 0 Dizeler '' karakterine kadar karşılaştırılır. İlk dize varsayılan olarak '' ile biter ve ikinci dize 'Merhaba'dan sonra '' 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ıdır.

strncasecmp() işlevi:

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

Sözdizimi:

intstrncasecmp(const karakter *str1, const karakter *str2)

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

Örnek Geri dönüş değeri Açıklama
strncasecmp( Merhaba Dünya,Merhaba Dünya,5 ) 0 İlk 5 karakter aynı.
strncasecmp( Merhaba,Merhaba Dünya,5 ) 0 İlk 5 karakter aynı.
strncasecmp( Merhaba″,Merhaba Dünya,8 ) 0 '', her iki dizedeki ilk 5 karakterden sonra gelir. Yani karşılaştırma 8'den 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. Karşılaştırılacak bellek bloklarının iki işaretçisini ve bayt sayısını geçmeliyiz.

Sözdizimi:

int memcmp (const geçersiz *str1, const geçersiz *str2, size_tn)

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).

Örnek Geri dönüş değeri Açıklama
memcmp( Merhaba Dünya,Merhaba Dünya,5 ) 0 İlk 5 karakter aynı.
memcmp( Merhaba″,Merhaba Dünya,8 ) negatif tam sayı İlk 6 karakter aynı, ancak 7. karakter farklı. Burada karşılaştırma durdurulmadı strncmp() '' karakterini alı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

Örnek:

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

01./*stringCompare.c*/
02.
03.#Dahil etmek
04.#Dahil etmek
05.
06.intana()
07.{
08. baskı ('strcmp('Selam Dünya','Selam Dünya' ) => %d ', strcmp ( 'Selam Dünya','Selam Dünya' ));
09. baskı ('strcmp('Merhaba','Merhaba\0Dünya' ) => %d ', strcmp ( 'Merhaba','Merhaba 0Dünya' ));
10. baskı ('strcmp('Selam Dünya','Selam Dünya' ) => %d ', strcmp ( 'Selam Dünya','Selam Dünya' ) );
on bir. baskı ('strcmp('Merhaba\0\0\0','Merhaba\0Dünya' ) => %d ', strcmp ( 'Merhaba 0 0 0','Merhaba 0Dünya' ));
12.
13. baskı (' --------------- ');
14.
on beş. baskı ('strncmp('Selam Dünya','Selam Dünya',5) => %d ', strncmp ( 'Selam Dünya','Selam Dünya',5 ));
16. baskı ('strncmp('Merhaba','Merhaba\0Dünya',5) => %d ', strncmp ( 'Merhaba','Merhaba 0Dünya',5 ));
17. baskı ('strncmp('Merhaba\0\0\0','Merhaba\0Dünya',8) => %d ', strncmp ( 'Merhaba 0 0 0','Merhaba 0Dünya',8 ));
18. baskı ('strncmp('Selam Dünya','Selam Dünya',5) => %d ', strncmp ( 'Selam Dünya','Selam Dünya',5 ));
19.
yirmi. baskı (' --------------- ');
yirmi bir.
22. baskı ('strcasecmp('Selam Dünya','Selam Dünya' ) => %d ',strcasecmp( 'Selam Dünya','Selam Dünya' ));
2. 3. baskı ('strcasecmp('Merhaba','Merhaba\0Dünya' ) => %d ',strcasecmp( 'Merhaba','Merhaba 0Dünya' ));
24. baskı ('strcasecmp('Selam Dünya','Selam Dünya' ) => %d ',strcasecmp( 'Selam Dünya','Selam Dünya' ));
25.
26. baskı (' --------------- ');
27.
28. baskı ('strncasecmp('Selam Dünya','Selam Dünya',5) => %d ',strncasecmp( 'Selam Dünya','Selam Dünya',5 ) );
29. baskı ('strncasecmp('Merhaba','Merhaba\0Dünya',5) => %d ',strncasecmp( 'Merhaba','Merhaba 0Dünya',5 ));
30. baskı ('strncasecmp('Merhaba\0\0\0','Merhaba\0Dünya',8) => %d ',strncasecmp( 'Merhaba 0 0 0','Merhaba 0Dünya',8 ));
31. baskı ('strncasecmp('Selam Dünya','Selam Dünya',5) => %d ',strncasecmp( 'Selam Dünya','Selam Dünya',5 ));
32.
33. baskı (' --------------- ');
3. 4.
35. baskı ('memcmp('Selam Dünya','Selam Dünya',5) => %d ', memcmp ( 'Selam Dünya','Selam Dünya',5 ) );
36. baskı ('memcmp('Merhaba\0\0\0','Merhaba\0Dünya',8) => %d ', memcmp ( 'Merhaba 0 0 0','Merhaba 0Dünya',8 ));
37. baskı ('memcmp('Selam Dünya','Selam Dünya',11 ) => %d ', memcmp ( 'Selam Dünya','Selam Dünya',on bir ));
38.
39.dönüş 0; 40.}

Çözüm:

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 değerini 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.