C dili

C Dilinde diziler 3

Karakter Dizileri

Şimdiye kadar double,integer,float tipinde diziler gördük. Artık string olarak da adlandırılan char veri tipindeki karakter dizilerine geldik. Temel olarak diğer dizilerle aynı mantıkla çalışan bu dizilerde kullanılan veri tipinin char olmasından dolayı bazı farklılıklarda bulunmaktadır;

char isim[10];

yukarıdaki örnekte dört tane char veri tipli elemandan oluşmuş bir yazıyı bellekte tutan bir dizi tanımladık. Burada belirtilmesi gereken bir durumda yazıyla beraber bellekte ‘’ işareti içerisinde tam sayı tutma özelliği de vardır.

İsimlerin bellekte nasıl tutulduğunu bir örnekle gösterecek olursak:

isim[8];

isim[0]=’F’;

isim[1]=’A’;

isim[2]=’T’;

isim[3]=’I’;

isim[4]=’H’;

ekrana dizinin tutuğu yazıyı yazmak için

for (i = 0; i< 100; ++i)

putchar(isim[i]);

ifadelerini ekleyip çalıştırdığımızda ,  yalnızca fatih ismi değil bir çok farklı işarette görünecektir. Bunun nedeni tanımlanmayan elemanlara tıpkı  diğer dizilerde olduğu gibi rastgele değer atanır ve bu değerler ASCII karşılıkları olan simgelerle ekrana  yazdırılırlar.

Şimdi ise karakter dizilerine atama yapmanın daha kolay yollarını  görelim;

for (i = 0; isim[i]!=’’; ++i)

putchar(isim[i]);

char isim[7]={‘F’,’A’,’T’,’i’,’H’,’6′,’’};

sona konulan null(”) karakteri okunduktan sonra dizi program tarafından sonlandırılır. Bu fonksiyonda sona null karakterini koymazsak program yine çalışır .Önemli olan  fonksiyona belli bir bitiş işareti tanımlamaktır. Ama karakterlerin sonundaki eleman böyle bir durumda yer olması halinde otomatik olarak atanır.tabi bir çok farklı durum da mevcuttur.

Örneğin;

char isim[85] = {‘F’,’A’,’T’,’9′};

printf(“%s\n”,isim);

ifadesinde sona null koymazsak dahi ekrana FAT9 yazar.Ama

char isim[2] = {‘F’,’A’,’T’,’9′};

printf(“%s\n”,isim); ifadesinde A dan sonra null koysak bile,sonuç değişmez ve program bellekte ayırılan yerden daha fazlası için atanan değerler yerine başka değerler ekrana yazdırır.

Daha önceki dizilerde dizinin eleman sayısını tanımlamamış ve dizinin yanındaki eleman satırına ne kadar eleman tanımlarsak hafızada o ölçüde yer ayırılıyordu . Bu durum genel bir durum olmanın yanında Char veri tipinde böyle bir tanımlamanın sorunsuz çalışması için son karakterden sonra null karakteri eklemek zorundayız.

char isim[] = {‘F’,’A’,’T’,’I’,’H’,”};

Sıra karakter dizilerini daha az çaba göstererek yapmaya geldi.

char isim[] = {‘F’,’A’,’T’,’I’,’H’,”}; ifadesini char isim[]={“FATIH”}; şeklinde yazabiliriz. Burada null karakterini kullanmaya gerek yoktur çünkü program otomatik olarak null karakterini yazar. Bu durum eleman sayısı belirtilmiş karakter  dizilerinde de geçerlidir. Ama belirtilen eleman sayısı kadar eleman sayısının bir eksiği kadar karakter yazmalıyız. Aksi takdirde program null değerini atayamaz.

Diğer dizilerde karakterlere değer ataması yaparken her elemana döngüler yardımıyla ayrı ayrı değer ataması yapıyorduk fakat karakter dizilerinde böyle bir mecburiyet yoktur.scanf fonksiyonu içerisinde karakter dizilerine otomatik olarak atama yapılmasını sağlar.

char metin[25];

printf(“metni giriniz:”);

scanf(“%s”,metin);

printf(“metniniz:%s”,metin);

Burada dikkat edilmesi gereken bir ikinci husus scanf fonksiyonunda dizi isminin önünde & adres operatörünün kullanılmamasıdır. Çünkü  program tarafından karakter dizilerinin adresleri ilk dizinin adresinden itibaren otomatik olarak atanır.

char cumle[30];

printf(” cümlenizi giriniz:\n”);

scanf(“%s”,cumle);

printf(“cumleniz:%s”,cumle);

Bu fonksiyonda Merhaba dünya girişi yaparsanız size ancak merhaba  yazısı dönücektir. Çünkü merhabadan sonraki boşluk program tarafından null olarak okunur bunun içinde iki farklı karakter dizisi oluşturarak  istediğimiz biçimde yazılarımızı yazabiliriz.Fakat böyle bir yazım bizim için zorluklar taşır.Burada scanf fonksiyonu yerine gets(get string) fonksiyonunu kullanmamız bizim için daha daha kolyadır,çünkü gets fonksiyonunun yapısı itibariyle null u karakter dizisinin sonuna otomatik olarak atar ve  tab ları nulldan ayırt eder. Örnek  verecek olursak;

char cumle[30];

printf(” cümlenizi giriniz:\n”);

gets(cumle);

printf(“cumleniz:%s”,cumle);

ifadesinde ekrana Merhaba Dunya  yazarsak Merhaba Dunya yazısını geri döndürür.

STANDART KARAKTER DİZİSİ FONKSİYONLARI

String.h kütüphanesi içerisinde yer alırlar.

Bir diziyi, bir başka diziye  kopyalamak için strcpy(  ) fonksiyonunu kullanırız. Diziler  aynı boyutta olmak zorunda değildir. Ancak kopya olacak dizi , kendisine gelecek kelimeyi alacak boyuta sahip olmalıdır.

#include

#include

int main(  )

{

char asil[50]=”KARAKTER DIZILERI”;

char yedek[30]=””;

strcpy(yedek,asil);

printf(“%s”,yedek);

strcpy() fonksiyonunun gelişmiş hali olup kaç tane  karakterin kopyalanacağını gösteren strncpy() fonksiyonu aşağıdaki gibidir.

char asil[40]=”Merhaba Dunya”;

char yedek[30] = “”;

strncpy( kopya, kaynak, 11 );

printf( “%s\n”, kopya );

strcmp() fonksiyonu kendisinde belirtilen iki karakter dizisini alfabetik olarak karşılaştırılır. Eğer ilk karakter ikinci karakterden büyükse pozitif değer, küçükse negatif değer ,eşitlerse 0 değeri döndürür.

#include

#include

int main(){

char birinci[60]=”buyuk”;

char ikinci[30]=”kucuk”;

printf(“%d”,strcmp(birinci,ikinci));

strncmp fonksiyonu ise soldan itibaren kaçını karaktere kadar karşılaştırmak istiyorsak karşılaştırmya yarayan bir strcmp in gelişmiş halidr.

Strcat() fonksiyonu birinciverilen dizinin sonuna ikincisini eklemede kullanılır.

#include

#include

int main(){

char      isim[50];

char soyisim[50];

char isim_soyisim[100]=””;

printf(“adiniz ve soyadinizi girin|\n:”);

scanf(“%s%s”,isim,soyisim);

strcat(isim_soyisim,isim);

strcat(isim_soyisim,”\t”);

strcat(isim_soyisim,soyisim);

printf(“%s”,isim_soyisim);

}

Strlen() fonksiyonu bir karakter dizisinin uzunluğunu ölçmek için kullanılan bir fonksiyondur.

Karakter Dizileri İçin Çok Boyutluluk

karakter dizilerinde de çok boyut tanımlaması mevcuttur.

Bunların kullanımı diğer türlerdekilerle aynıdır.

#include

int main(){

int i,j;

char isimler[3][5]={“alice”,”melis”,”felis”};

printf(“%c”,aile[2][2]);

C Dilinde diziler 3&rdquo için 1 yorum

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: