Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerinde metin ve yazı gibi bilgileri tutmak için kullanılan dizgileri (Strings) tutan değişkenler karşılaştırılırken eşitlik kontrolü yapılması mümkün değildir.

Bunun yerine dizginin tamamının eşit olup olmadığını kontrol etmek ve ancak bütün elemanları aynıysa eşit oldukları hükmüne varmak gerekir.

Bu durum aşağıdaki şekilde açıkça görülmektedir:

Yukarıdaki şekilde hafızada durmakta olan iki ayrı dizgiyi gösteren iki ayrı değişken gösterilmektedir (p ve q değişkenleri).

Bilindiği üzere bir dizgi hafızada dizi (array) olarak durmaktadır ve her elemanı bir karakterdir (character).

Şimdi aşağıdaki kontrol işlemini ele alalım:

if(p==q)

bu kontrolde, p değişkenindeki değer ile q değişkenindeki değer karşılaştırılmıştır. Göstericiler (pointers) bilindiği üzere içlerinde gösterdikleri adresin değerini tutarlar. Yani p değişkeninin içindeki değer ile q değişkeninin içindeki değer, hafızada farklı adresleri gösterdikleri için birbirinden farklıdır. Gösterdikleri yerlerdeki değerlerin aynı olup olmadığını anlamak için bütün elemanlar karşılaştıırlmalıdır.

int esitmi=1;
int i;
for(i = 0;p[i]!='';i++){
   if(p[i]!=q[i]){
       esitmi=0;
       break;
  }
}
if(esitmi==1&&q[i]==''){
   printf("esitler");
}
else{
   printf("esit degiller");
}

Yukarıdaki kod, bir döngü içerisinde dizgi sonu (end of string,  ‘’) p ve q değişkenlerinin bütün elemanlarını teker teker karşılatırır. Şayet esitliği bozan bir tek karakter bulunursa esit degiskeninin değeri değişir ve sonuç eşit değil olarak atanır.

Şayet dizgi sonuna kadar farklı bir karakter bulunmazsa ve iki dizginin de sonuna gelinmişse bu dizgiler eşittir. Şayet tek bir farklı karakter bulunmuşsa veya dizgi boyutları farklıysa eşit olmayacaklardır.

Yukarıdaki bu kontrolü her seferinde çalıştırmak yerine C dilindeki string.h kütüphanesindeki strcmp komutu kullanılabilir:

if(!strcmp(p,q)){
    printf("eşitler");
}
else {
   printf("eşit değiller");
}

yukarıdaki strcmp fonksiyonunun kullanılışı gösterilmiştir. Buradaki kullanımda strcmp fonksiyonunun başında bir ! işareti bulunuyor bunun anlamı strcmp fonksiyonunun döndürdüğü değerin tersini al demektir.

Bunun sebebi strcmp fonksiyonunun sözlüksel (lexiconically) olarak karşılaştırma yapmasıdır. Dolayısıyla iki dizgi (String) eşit olması durumunda fark 0 olacağı için 0 dönecektir. C dilinde 0 olumsuzdur (false) dolayısıyla eşit olduklarında olumsuz dönmüş olacak. Aslında eşit durumu için if işleminde tersi alınması gerekir.  Anlaşılacağı üzere strcmp fonksiyonu yukarıdaki döngüyü kendi içerisinde çalıştırarak kontrol işlemini yapar.

JAVA ve C# dillerinde dizgiler (strings) birer sınıftır (class). Dolayısıyla bu sınıf içerisinde bulunan equals fonksiyonu ile eşitlik kontrolü yapılabilir.

if(p.equals(q)){
   //eşitler
}
else{
  //eşit değiller
}

Yukarıdaki örnekte p nesnesinin (object) equals metodu çağrılarak q nesnesi parametre olarak verilmiştir. Tersinin yapılmasıda mümkündür ve hiçbir farkı yoktur:

if(q.equals(p))

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir