Karakter Dizileri – C Programlama Dili

C dilinde string veri tipinin olmadığından bahsetmiştik.
Bunun yerine stringler aslında karakter dizileridir tanımından yola çıkarak,
string değer yazdırmak istediğimizde karakter dizilerini kullandığımıza da yer
verdik.
Karakter dizileri programlarımızda; ad-soyad, mesaj gibi verileri saklamak için kullandığımız veri tipidir. Karakter dizileri de normal bir dizi tanımlar gibi tanımlanır. Sadece tür kısmını char belirtmemiz gerekir.
char mesaj[50];
tanımı ile 50 karakterlik bir karakter dizisi tanımlamış oluruz. Bu dizinin tüm karakterleri harf olmak zorunda değildir, sayısal değerler ya da sembollere de yer verebiliriz.
Ancak sayısal dizilerden farklı olarak, karakter dizileri ile yapılabilecek işlemler veya kullanım alanları farklı olabilir. Ayrıca C dilinin karakter dizileri ile ilgili sunduğu destek ve fonksiyonlar da sayısal veri dizilerine göre farklıdır.
Bir karakter dizisi tanımlandığında, derleyici dizinin sonunu belirlemek adına otomatik olarak dizinin sonuna ‘\0’ değeri ekler. Bu karakter, bir karakter dizisi için önemlidir. Dizinin sonuna gelinip gelinmediğini anlamak için hem C dilindeki fonksiyonlarda hem de yazdığımız programlarda bu karakterden faydalanırız.
Sonlandırıcı karakter olarak da ifade edilen bu karakter; dizinin sonunu gösterdiği gibi ASCII tablosundaki ‘\0’ nolu karaktere karşılık gelir.
Özetle karakter dizisi, ‘\0’ NULL değer ile sona eren bir char dizisidir.
Karakter Dizileri İlk Değer Ataması
Karakter dizilerine ilk değer ataması 2 türlü yapılır. Birincisi aşağıdaki gibidir :
char mesaj[8] = {‘D’ , ’i’ , ’z’ , ’i’ , ’l’ , ’e’ ,’r’, ‘\0’};
Bu tanımlamada olduğu gibi dizi elemanlarını tek tek değer vereceksek, dizinin sonlandırıcı karakterini programcının girmesi gerekir.
İkincisi ise
char mesaj[8] = “Diziler”;
şeklindedir ki, bu tanımlamada sonlandırıcı karakter, derleyici tarafından otomatik olarak eklenir. Bu sebeple bir karakter dizisine toplu değer ataması yaparken dizi eleman sayısından 1 eksik atama yapılmalıdır.
Klavyeden Karakter Dizisi Okuma ve Yazdırma
C dilinde klavyeden girilen karakter dizileri, standart input output kütüphanesinin bir fonksiyonu olan gets() fonksiyonu ile okutulabilir.
Bu fonksiyon, “stdio.h” header dosyasında tanımlı olduğundan programımıza bu başlık dosyasını eklemeliyiz.
gets() fonksiyonunun kullanımını basit bir uygulamada görelim :
Bu uygulamada klavyeden karakter dizisi okuması yapılmış ve okutulan karakter dizisi ekrana 2 farklı yöntem kullanılarak yazdırılmıştır. Ayrıca klavyeden okutulan mesajın kaç karakter olduğu bilgisi de hesaplatılmıştır.
Şimdi uygulamayı adım adım inceleyelim :
char mesaj[100];
ifadesi ile 100 karakterlik adı mesaj olan bir char dizisi tanımladık. Sonrasında sayac adında ilk değeri 0 olan int bir değişken tanımladık. Bu değişkeni, char dizisinin eleman sayısını bulmak için kullanacağız.
Sonrasında kullanıcıdan bir mesaj yazmasını istediğimiz bir printf() fonksiyonu geliyor. Ve arkasından gelen gets() fonksiyonu ise kullanıcının gireceği string ifadeyi almak için kullanıldı :
gets(mesaj); //Sadece dizi adının verildiğine dikkat edin.
Kullanıcının girdiği metinsel ifade mesaj adındaki karakter dizisine gets() fonksiyonu ile atandıktan sonra bir while döngüsü geliyor.
Bu döngü dizinin her bir elemanının sonlandırıcı karakter olup olmadığını sorguluyor :
while(mesaj[sayac] != '\0') // son karaktere eşit olmadığı sürece
Yani bu döngü son karakteri görene kadar devam edecektir, ve her bir adımda
sayac++;
ifadesi ile sayac değişkenimizin değerini bir artıracaktır. Nihayetinde sonlandırıcı karakteri okuduğu zaman şart sağlanmadığından döngüden çıkılacaktır.
Böylelikle sayac değişkenimizin içinde girilen mesajın karakter boyutu tutulmaktadır.
Uygulamanın son kısmında verilen printf() fonksiyonları bizim için oldukça önemli :
printf("\n\tMesajınız : %s", mesaj); //string yazdırma 1.yöntem
printf("\n\tMesajınız %d karakterdir", sayac);
printf("\n\t**\n\t");
printf(mesaj); //string yazdırma 2.yöntem
Aşağıdaki printf() fonksiyonlarının ikisi de karakter dizisi yazdırmaya yaramaktadır :
printf("\n\tMesajınız : %s", mesaj); //string yazdırma 1.yöntem
printf(mesaj); //string yazdırma 2.yöntem
Her ikisinde de karakter dizisi için dizi isminin kullanıldığını fark etmişsinizdir. Ayrıca 1.yöntemde karakter dizisini ekrana yazdırmak için %s sabitinin kullanımı önemlidir.
Çıktımız aşağıdaki gibidir :
string.h Kütüphanesi Fonksiyonları
C dilinde diğer dizilerden farklı olarak karakter dizilerine ait fonksiyonların varlığından bahsettik. Bu fonksiyonlar “string.h” header dosyasında tanımlanmıştır. Bu sebeple bu fonksiyonlardan herhangi birini programımızda kullanırsak, bu kütüphaneyi kodumuza dahil etmemiz gerekmektedir.
strlen(sdizi)
strlen(sdizi) fonksiyonu, sdizi ile belirtilen karakter dizisinin uzunluğunu verir..
Uygulaması ise aşağıdaki gibidir :
Çıktımız ise aşağıdaki gibidir :
strcpy(sdizi1, sdizi2)
Bu fonksiyon sdizi2 ile belirtilen karakter dizisini sdizi1 ile belirtilen karakter dizisine kopyalar.
C dilinde karakter dizilerini birbirine atamak için bir tane atama operatörü kullanmak yeterli değildir. Bir diziyi başka bir diziye kopyalamak için dizi elemanlarını tek tek birbirine bir döngü içerisinde atamak gerekir.
Bu sebeple strcpy() fonksiyonu bize oldukça kolaylık sağlar.
Fikir vermesi adına uygulaması aşağıdaki gibidir :
Çıktımız ise aşağıdaki gibidir :
strcmp(sdizi1, sdizi2)
strcmp(sdizi1, sdizi2) fonksiyonu parametre olarak verdiğimiz iki karakter dizisini karşılaştırır. Eğer bu iki karakter dizisi :
- Eşitse sdizi1 == sdizi 2 ise 0 (sıfır)
- Büyükse sdizi1 > sdizi2 ise pozitif
- Küçükse sdizi1 < sdizi2 ise negatif
Değer döndürür.
Ancak bu karşılaştırmayı sözlüksel olarak yaptığı için bu fonksiyonu iki karakter dizisinin eşit olup olmama durumu için kullanmak daha mantıklı olacaktır.
Kullanımı hakkında fikir vermesi için ufak bir uygulama yapalım :
Çıktımız ise aşağıdaki gibidir :
strcat (sdizi1, sdizi2)
Bu fonksiyon ise parametre olarak verilen iki diziyi birleştirmek için kullanılır. sdizi1 ile sdizi2 birleştirir ve sonucu sdizi1 içinde saklar.
İki karakter dizisini birleştiren basit bir uygulama yaparak kullanımını görelim :
Çıktımız ise aşağıdaki gibidir :
Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.
Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.
Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.
Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/19/03/2019/karakter-dizileri-c-programlama-dili/
Yine güzel, özenle hazırlanmış bir ders yazısı olmuş. Ellerine sağlık @etasarim :)
Teşekkür ederim @damla, mesajınız beni mutlu etti. Bayadır göremiyordum sizi :)
Congratulations @etasarim! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOPTo support your work, I also upvoted your post!
Do not miss the last post from @steemitboard:
Hi, @etasarim!
You just got a 1.51% upvote from SteemPlus!
To get higher upvotes, earn more SteemPlus Points (SPP). On your Steemit wallet, check your SPP balance and click on "How to earn SPP?" to find out all the ways to earn.
If you're not using SteemPlus yet, please check our last posts in here to see the many ways in which SteemPlus can improve your Steem experience on Steemit and Busy.
Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here
thanks for supports :)