String Comparison

Dec 24, 2012

Konu Sercan (@sercan_eraslan)’ın şu sorusuyla açıldı:

Bilinçli bir vatandaş olarak görevden kaçamazdım, cevap vermeye çalıştım.

Bu karşılaştırma işlemi kısaca şöyle oluyor:

İki string’i karşılaştırmak istediğimizde derleyici/yorumlayıcı bu string’leri alıp, karakter karakter karşılaştırıyor. İki karakter eşit ise bir sonraki karakterleri alıp, onları karşılaştırıyor ve bu eşitlik bozulana kadar bu karşılaştırma işlemi devam ediyor.

Peki iki karakteri nasıl karşılaştırıyoruz, yani bir karakter nasıl oluyor da diğerinden büyük oluyor?

Bu karşılaştırma işlemi karakterlerin ASCII tablosundaki karşılıklarına göre yapılıyor, tablodaki değeri büyük olan karakter daha büyük sayılıyor.

Sercan’ın sorusundaki karşılaştırmaya bakacak olursak:

“23” < “3” :

Önce eşitliğin sol tarafındaki “23”ün ilk karakteri olan “2” ile sol taraftaki “3” karşılaştırılıyor. “2”nin ASCII tablodaki karşılığı 50(dec), “3”ün karşılığı ise 51(dec). Eşitlik ilk karakterde bozuldu ve karşılaştırmanın sağ tarafı daha büyük çıktı. Karşılaştırma işlemi burada sonlanır ve sonuç TRUE döner.

Başka bir örnek daha inceleyelim, mesela Japonya ile Jamaika’yı karşılaştıralım:

“Japonya” > “Jamaika” şeklinde olsun karşılaştırmamız.

Burada eşitliğin bozulduğu ilk yer “p” ile “m”nin karşılaştırıldığı yer. ASCII tablosunda “p” 112(dec), “m” ise 109(dec)’a karşılık geliyor. Dolayısıyla “Japonya” daha büyük oluyor ve bu karşılaştırma için de sonuç TRUE dönüyor.

Son bir örnek olarak, “23” ile “elma” karşılaştırmasını yapalım:

“23” < “elma” :

“2”nin değeri 50(dec), “e”nin değeri ise 101(dec)’dir. Dolayısıyla karşılaştırmanın sağ tarafı büyüktür ve sonuç TRUE olur.

Dikkat edilmesi gereken bir nokta da, harflerin küçük halleriyle büyük hallerinin farklı değerlere sahip oluşudur. Mesela “c” 99(dec) değerine karşılık gelirken “C” 67(dec) değerine karşılık gelmektedir.

Umarım yeterince anlaşılır olmuştur.

Herkese kolay gelsin.

  • dec : decimal(onluk sayı sistemi)