Ders 7: Dizgeler
Genel Bakış Giriş Dizgeler Dizge Tanımı Dizge Girdi İşlemleri Dizge Fonksiyonları 2
Giriş Char tipindeki karakterlerin gruplanmış haline dizge (string) denir. Bazen katar ismi de kullanılabilir. C dilinde karakterlerin her biri aslında bir tamsayı ile ifade edilir. C dilinde dizgeler "dizge" şeklinde çift tırnak içerisinde yazılırlar. 3
Dizgeler Dizgeler " ve " şeklinde iki çift tırnak işareti arasında tanımlanmış olan sıralı karakterler bütünüdür. Dizge Açıklama "Merhaba" 7 karakterli dizge "Bu bir dizge" 12 karakterli dizge "B" 1 karakterli dizge "" Boş dizge 4
Dizgeler C dilinde bir dizge en sonuna \0 karakteri eklenmiş bir karakter dizisidir. "Programlama" P r o g r a m l a m a \0 Dizgenin sonu görüldüğü gibi null (boş) karakterdir. 5
Dizge Tanımı char dizi_adı[uzunluk]; char kelime[10]; 0 1 2 3 4 5 6 7 8 9 kelime kelime[0] = B ; kelime[1] = i ; kelime[2] = l ; kelime B i l \0 6
Dizge Tanımı Dizgeleri tanımlarken ilk değerini de atayabiliriz. char isim[20] = "MURAT" 0 1 2 3 4 5 19 isim M U R A T \0 isim[0] = E ; 0 1 2 3 4 5 19 isim E U R A T \0 7
Dizge Tanımı Dizge uzunluğunu tanımlama yaparken vermeden de ilk değerini atayabiliriz. char dergi[ ] = "Bilim Teknik"; dergi 0 1 2 3 4 5 6 7 8 9 10 11 12 B i l i m T e k n i k \0 8
Dizge Tanımı Örnek: char dizge[ ] = "Programlama Dilleri"; int sayac = 0; int i; for(i=0; dizge[i]!= \0 ;i++) sayac++; printf("%s %d karakter icerir.",dizge,sayac); Çıktı: 9 karakter içerir. 9
Dizge Girdi İşlemleri Girdi işlemi scanf() fonksiyonu ile girilen değer içinde enter a basılana kadar devam eder. Örnek: scanf("%s",dizge_adi); char kelime[25]; scanf("%s",kelime); Girdi teknoloji soru sor Kelime t e k n o l o j i \0 s o r u \0 10
Dizge Girdi İşlemleri char kelime[15]; scanf("%7s",kelime); //programlama printf("%s\n",kelime); // program 15 elemanlı bir katara maksimum 7 eleman girilmesini sağlamak. 11
gets() fonksiyonu gets() fonksiyonu enter ya da girdi sonunu belirleyen (ctrl+z) karakterini görünceye kadar girdiyi okumaya devam eder ve okuduğu değerin sonuna boş karakterini \0 otomatik ekleyerek dizge_adı na bu değeri atar. gets(char *dizge_adı); 12
gets( ) fonksiyonu Örnek: char dizge[30]; gets(dizge); Girdi cumle prg giris Not: gets( ) ile girdi alırken boşluk bırakılabilir. p r g g i r i s \0 13
puts( ) fonksiyonu puts( ) fonksiyonu standart çıktı birimine yani ekrana dizginin değerinin bastırılmasını sağlar ve daha sonra yeni satır karakterini otomatik olarak çıktının sonuna ekler. puts(char *dizge_adı); 14
puts( ) fonksiyonu Örnek: char dizgi1[15] = "Bilecik"; char dizgi2[ ] = "Universitesi"; puts(dizgi1); puts(dizgi2); Çıktı: Bilecik Universitesi 15
sprintf() fonksiyonu Farklı değişkenlerin değerini belirli bir format dizgisine uygun olarak yeni bir dizginin içine kopyalar. sprintf (char *dizgi_adı, format_dizgisi, liste); 16
sprintf() fonksiyonu Örnek: float benzin = 47.0; float km = 300; char benzin_km[80]; sprintf(benzin_km,"%5.3f lt. benzin yakiyor", km/benzin); printf ("%s ", benzin_km); Çıktı: 6.383 lt. benzin yakiyor 17
strlen() fonksiyonu Dizgi işleme amacıyla hazırlanmış programlarda kolaylık sağlayabilecek bir çok fonksiyon <string.h> kütüphanesi içinde tanımlanmıştır. Bir dizginin içindeki karakter sayısını bulmak için strlen() fonksiyonu kullanılır. strlen(char *dizge_adı); Örnek: int uzunluk; 6 char dizgi[10] = Mehmet uzunluk = strlen(dizgi); 18
strcpy() fonksiyonu strcpy() fonksiyonu dizgi kopyalama fonksiyonudur. strcpy (char *dizge2_adı, char * dizge1_adı); Örnek: /*dizge1 i dizge2 ye kopyalama işlemi*/ char dizge1[20] = "Programlama"; char dizge2[15]; // Boyut farklı olabilir. strcpy(dizge2,dizge1); 19
strncpy() fonksiyonu Bu fonksiyon dizgi1 in içindeki ilk n karakterin dizgi2 ye kopyalanmasını sağlar. strncpy (char *dizgi2, char *dizgi1, n); Örnek: char ad[50] = "Ahmet Mehmet Ayse"; char ilkad[20]; char ortaad[20]; strncpy(ilkad,ad,5); strncpy(ortaad,ad+6,6); /* 6. karakterden itibaren 6 harf */ 20
strcat() fonksiyonu Bir dizgenin sonuna diğer bir dizgenin yapıştırılmasını sağlar. strcat (char *dizge1, char *dizge2); Örnek: char dizgi1[20]="merhaba"; char dizgi2[20]= Nasilsiniz? ; strcat(dizgi1, dizgi2); dizgi1 in yeni hali "Merhaba Nasilsiniz?" olur. 21
strncat() fonksiyonu dizgi2_adı nın ilk n karakterinin dizgi1_adı nın sonuna yapıştırılmasını sağlar. strncat (char *dizgi1_adı, char *dizgi2_adı, n); Örnek: char dizgi1[20]="iyi gunler "; char dizgi2[20]= Nasilsiniz? ; strncat (dizgi1, dizgi2, 5); printf ("\ndizgi 1: %s ",dizgi1); printf ("\ndizgi 2: %s ",dizgi2); Çıktı: dizgi 1: iyi gunler Nasil dizgi 2: Nasilsiniz? 22
strcmp () fonksiyonu İki dizgenin karşılaştırılmasını sağlar. int strcmp(const char *s1, const char *s2); dizge1 dizge2 strcmp(dizge1,dizge2) kopek araba 1 kedi zambak -1 kedi kedi 0 değerlerini geri döndürür. Alfabetik sıralamalarda kullanılan önemli bir fonksiyondur. 23
strncmp() fonksiyonu İki dizginin ilk n karakterlerinin karşılaştırılmasını sağlar. strncmp (char * dizgi1_adı, char * dizgi2_adı, unsigned int n); Örnek: char dizgi1[13]="iyi gunler "; char dizgi2[13]= "iyi misiniz?"; printf ("\n%d ",strncmp (dizgi1, dizgi2, 3)); Çıktı: 0 İki dizgenin ilk 3 karakteri aynı 24
strstr() fonksiyonu Bir dizginin içinde diğer bir dizgiyi arar. strstr(char *dizgi1_adı, char *dizgi2_adı); Örnek: char dizgi1[13]="iyi gunler "; char dizgi2[13]= "gun"; if (strstr (dizgi1, dizgi2) == '\0') printf ("dizgi2 dizgi1 in icinde YOK"); else printf ("dizgi2 dizgi1 in icinde VAR"); Çıktı: dizgi2 dizgi1 in icinde VAR 25
Bazı Dizge Fonksiyonları char k olmak üzere; Fonksiyon Döndürdüğü Değer isalpha(k) k bir harf ise, sıfırdan farklı, diğer durumlarda sıfır isdigit(k) k bir sayı ise, sıfırdan farklı, diğer durumlarda sıfır islower(k) k küçük bir harf ise, sıfırdan farklı, diğer durumlarda sıfır. isupper(k) k büyük bir harf ise, sıfırdan farklı, diğer durumlarda sıfır isspace(k) k boşluk, yeni satır veya tab karakteri gibi bir karakterse, sıfırdan farklı, diğer durumlarda sıfır karşılığı toupper(k) k nın değerinin büyük harf karşılığı 26