ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING) 1. HAFTA KARAKTER Karakterler, programlarda kullanılan temel simgelerdir. Her karakterin ASCII kod tablosunda bir tamsayı değer karşılığı vardır ve C programlama dilinde tek tırnak içinde verilirler. Karakter ASCII kod karşılığı A 65 Z 90 a 97 z 122 1
KARAKTER DİZİSİ - KATAR Karakterler, arka arkaya gelerek karakter dizileri ni (katarları) (string) oluştururlar. C de karakter dizileri çift tırnak içinde verilir ve kesinlikle \0 ile biter. \0 (NULL), karakter dizisinin elemanı olmayıp sonunu gösteren 1 Byte lık kontrol karakteridir. KARAKTER DİZİSİ BİLDİRİMİ C programlama dilinde karakter dizilerinin bildirimi iki şekilde yapılabilmektedir: Bir boyutlu dizi tipinde bildirim İşaretçi tipinde bildirim 2
BİR BOYUTLU DİZİ ŞEKLİNDE BİLDİRİM C programlama dilinde karakter dizileri char dizi adı [ eleman sayısı ]; şeklinde bir boyutlu dizi olarak bildirilebilirler. Derleyici bu bildirim sonucu: 1. Bellekte eleman sayısı tane Byte ayırır 2. Karakter dizisinin ilk karakterinin adresini dizi adı na aktarır. BİR BOYUTLU DİZİ ŞEKLİNDE BİLDİRİM Örneğin char alfa[3]; şeklindeki bildirim sonucu bellekteki durum &alfa alfa[0] alfa[1] alfa[2] 1 2 3 gibidir. 3
BİR BOYUTLU DİZİ ŞEKLİNDE BİLDİRİM Bir boyutlu dizi şeklinde yapılan bildirimler sonucu karakter dizilerine doğrudan atamalar yapılamaz. Atama, birleştirme (toplama) gibi işlemler; fonksiyonlar kullanılarak gerçekleştirilir. BİR BOYUTLU DİZİ ŞEKLİNDE BİLDİRİM 4
İŞARETÇİ ŞEKLİNDE BİLDİRİM C programlama dilinde karakter dizileri char * değişken adı ; şeklinde işaretçi olarak bildirilebilirler. Bu bildirim sonucunda: 1. Bellekte yer ayrılmaz. 2. Aktarılan karakter sayısına göre bellekte kapladığı alan değişir. 3. Karakter dizisinin başlangıç adresinin saklanacağı işaretçi değişken bildirilir. 4. malloc gibi fonksiyonlar kullanılarak karakter dizisinin bellek alanı dinamik olarak değiştirilebilir. İŞARETÇİ ŞEKLİNDE BİLDİRİM İşaretçi şeklinde yapılan bildirimler sonucu karakter dizilerine doğrudan atamalar yapılabilir. Bu tür tanımlanmış karakter dizileri kullanılırken 1. Sadece işaretçinin adı varsa tüm karakter dizisi 2. İşaretçi adından önce * karakteri de varsa karakter dizisinin ilgili karakteriyle ilgileniliyor anlamındadır. 5
İŞARETÇİ ŞEKLİNDE BİLDİRİM BAŞLANGIÇ DEĞERİ VERME Karakter dizilerine, bildirim şekillerine göre iki şekilde başlangıç değeri atanabilir: 1. Dizi şeklinde bildirimde başlangıç değeri: char isim [] = { tek tırnak içinde ve virgülle ayrılmış karakterler, \0 } ; char isim [] = değer ; 2. İşaretçi şeklinde bildirimde başlangıç değeri char *isim = değer ; 6
BAŞLANGIÇ DEĞERİ VERME ALFASAYISAL BİLGİLERİN GİRİLMESİ Klavyeden alfasayısal bilgileri (karakterler, karakter dizileri) girmek (okumak) için C programlama dilinde farklı komutlar kullanılabilir. 7
ALFASAYISAL BİLGİLERİN GİRİLMESİ Komut Kütüphane Kullanım şekli Açıklama scanf stdio.h scanf( format,& değişken ) sscanf gets getch getche getchar stdio.h stdio.h conio.h conio.h stdio.h scanf(dizi, format,& değişken ) gets( değişken ) Karakterleri boşluk, yeni satır veya dosya sonu gibi belirteçlere kadar alır/okur. scanf ile eşdeğer olup girdileri bir diziden okur. Karakterleri yeni satır veya dosya sonu belirtecine kadar, sonuna NULL (\0) ekleyerek alır/okur. değişken =getch() Ekranda görülmeden tek bir karakter alır/okur. değişken =getche() değişken =getchar() Ekranda görünerek tek bir karakter alır/okur. Ekranda görünerek girilen karakter dizisinin ilk karakterini alır/okur. ALFASAYISAL BİLGİLERİN GİRİLMESİ 8
ALFASAYISAL BİLGİLERİN GİRİLMESİ ALFASAYISAL BİLGİLERİN GİRİLMESİ 9
ALFASAYISAL BİLGİLERİN GİRİLMESİ ALFASAYISAL BİLGİLERİN GİRİLMESİ 10
ALFASAYISAL BİLGİLERİN GİRİLMESİ ALFASAYISAL BİLGİLERİN YAZDIRILMASI Komut Kütüphane Kullanım şekli Açıklama printf sprintf puts stdio.h stdio.h stdio.h printf( format,& değişken ) sprintf(dizi, format,& değişken ) puts( değişken ) Değişken içeriklerini veya ifadeleri formatlı bir şekilde yazdırır. printf ile eşdeğer olup sonucu bir diziye yazdırır. NULL ile sonlandırılmış karakter dizisini yazdırıp yeni satıra geçer. putchar stdio.h putchar( değişken ) Tek karakter yazdırır. putch conio.h putch( değişken ) Tek karakter yazdırır. 11
ALFASAYISAL BİLGİLERİN YAZDIRILMASI ALFASAYISAL BİLGİLERİN YAZDIRILMASI 12
ALFASAYISAL BİLGİLERİN YAZDIRILMASI ALFASAYISAL BİLGİLERİN YAZDIRILMASI 13
KARAKTER DİZİSİNİN UZUNLUĞU C programlama dilinde karakter dizilerinin uzunlukları (içerdikleri karakter sayısı) strlen ( alfasayısal bilgi); komutuyla bulunabilir. Bu hesaplamada karakter dizisi sonundaki NULL belirteci yer almaz. KARAKTER DİZİSİNİN UZUNLUĞU 14
KARAKTER TÜRLERİNİN TESPİTİ Komut isdigit isalpha isalnum isxdigit isspace iscntrl ispunct isprint isgraph islower isupper Açıklama ( 1 (Doğru) (True), değilse 0 (Yanlış) (False) Rakam (0-9) ise Harf (A-Z, a-z) ise Harf veya rakam ise 16 tabanında karakter (0-9, A-F, a-f) ise Boşluk ( ), yatay veya düşey tab ( \t, \v ), form besleme ( \f, 0x09, 0x0D, 0x20), satır başı ( \r ), yeni satır ( \n ) gibi karakter ise Delete veya diğer fonksiyon karakteri (0x7F veya 0x00 den 0x1F ye kadar) ise Boşluk, harf ve rakam dışında yazılabilen diğer karakter (noktalama işaretleri, simgeler gibi)ise Ekrana yazdırılabilen karakter ise (boşluk dahil) Ekrana yazdırılabilen karakter ise (boşluk hariç) Küçük harf ise Büyük harf ise KARAKTER TÜRLERİNİN TESPİTİ 15
KARAKTERLERİN KOPYALANMASI Komut strcpy strncpy Açıklama strcpy ( s1, s2 ); s2 yi s1 e kopyalar (atama yapar) strncpy ( s1, s2, n ); s2 nin ilk n tane karakterini s1 e kopyalar (atama yapar) KARAKTERLERİN KOPYALANMASI 16
KARAKTERLERİN EKLENMESİ Komut strcat strncat Açıklama strcat ( s1, s2 ); s2 yi s1 in arkasına ekler strncat ( s1, s2, n ); s2 nin ilk n tane karakterini s1 in arkasına ekler KARAKTERLERİN EKLENMESİ 17
KARAKTERLERİN KARŞILAŞTIRILMASI Komut strcmp strncmp stricmp strnicmp Açıklama strcmp ( s1, s2 ); s1 ile s2 yi karşılaştırır. s1=s2 0 s1>s2 >0 s1<s2 <0 strncmp ( s1, s2, n ); s1 ile s2 nin n tane karakterini karşılaştırır. strcmp ile aynı, büyük-küçük harf eşit strncmp ile aynı, büyük-küçük harf eşit KARAKTERLERİN KARŞILAŞTIRILMASI 18
KARAKTERLERDE ARAMA Komut Açıklama strchr strrchr strstr strpbrk strspn strchr ( c, h ); Baştan sona doğru başlayarak c alfasayısal bilgisi içinde h harfinin bulunduğu ilk karakterin adresini (kendisi dahil sonraki karakterleri) verir. strrchr ( c, h ); Sondan başa doğru başlayarak c alfasayısal bilgisi içinde h harfini arar. strstr ( s1, s2 ); s1 içinde s2 yi arar. strpbrk ( s1, s2 ); s1 içinde s2 karakter grubundaki karakterlerden s1 in başlangıcına en yakın olanı arar. strspn ( s1, s2 ); s1 içinde s2 karakter grubunun bulunduğu ilk parçanın uzunluğunu tespit eder. strcspn strcspn ( s1, s2 ); s1 içinde s2 karakter grubunun bulunduğu ilk parçanın dışındaki uzunluğunu tespit eder. KARAKTERLERDE ARAMA 19
KARAKTERLERDE ARAMA KARAKTERLERDE DÖNÜŞTÜRME - 1 Komut strlwr strupr strrev Açıklama Alfasayısal bilgideki tüm karakterleri küçük harfe çevirir. Alfasayısal bilgideki tüm karakterleri büyük harfe çevirir. Alfasayısal bilgiyi ters (sondan başa) çevirir. 20
KARAKTERLERDE DÖNÜŞTÜRME KARAKTERLERDE DÖNÜŞTÜRME - 2 Komut strtod strtol strtoul sonuç = strtod ( str, dur ); Açıklama İçinde rakamlar, nokta, +, -, e ve E harfleri içeren alfasayısal bilgiyi double değere dönüştürür. dur değişkeni de okumayı durduran ilk karakteri gösterir ( *dur=&durduran karakter ) sonuç = strtol ( str, dur, taban ); Alfasayısal bilgiyi belirtilen tabanda long değere dönüştürür. sonuç = strtoul ( str, dur, taban ); Alfasayısal bilgiyi belirtilen tabanda (2, 4, 5, 8, 10, 12, 16, 20, 36) unsigned long değere dönüştürür. 21
KARAKTERLERDE DÖNÜŞTÜRME KARAKTERLERDE DÖNÜŞTÜRME Komut Açıklama tolower toupper strlwr strupr strrev strtod strtol strtoul atof atoi atol itoa ltoa ultoa fcvt ecvt gcvt Karakteri küçük harfe çevirir. Karakteri büyük harfe çevirir. Alfasayısal bilgideki tüm karakterleri küçük harfe çevirir. Alfasayısal bilgideki tüm karakterleri büyük harfe çevirir. Alfasayısal bilgiyi ters (sondan başa) çevirir. Alfasayısal bilgiyi double değere dönüştürür. Alfasayısal bilgiyi long değere dönüştürür. Alfasayısal bilgiyi unsigned long değere dönüştürür. Alfasayısal bilgiyi double değere dönüştürür. Alfasayısal bilgiyi int değere dönüştürür. Alfasayısal bilgiyi long değere dönüştürür. Sayısal bilgiyi, verilen tabana göre alfasayısal bilgiye dönüştürür. Sayısal bilgiyi, verilen tabana göre alfasayısal bilgiye dönüştürür. Sayısal bilgiyi, verilen tabana göre alfasayısal bilgiye dönüştürür. double değeri alfasayısala çevirir. double değeri alfasayısala çevirir. double değeri alfasayısala çevirir. 22
KARAKTERLERDE DÖNÜŞTÜRME BELLEK DİZİLERİNDE İŞLEMLER Komut Açıklama memcpy memmove memccpy memset memcmp memicmp memchr memcpy ( s1, s2, n ); s2 deki n karakteri (Byte) s1 e kopyalar. memmove ( s1, s2, n ); s2 deki n karakteri (Byte) s1 e kopyalar/taşır. memccpy ( s1, s2, c, n ); s2 deki n karakteri (Byte) s1 e kopyalar. Kopyalama işlemi belirtilen c karakteri kopyalanana kadar veya ilk n karaktere kadar yapılır. memset ( s1, c, n ); s1 in ilk n karakterine belirtilen c karakterinden aktarır. memcmp ( s1, s2, n ); s1 ile s2 nin ilk n karakterini karşılaştırır (büyük-küçük harf duyarlı). Büyük-küçük harf duyarlılığı olmadan karşılaştırma yapar. memchr ( s1, c, n ); s1 in ilk n karakterinde belirtilen c karakterini arar. 23
KARAKTER DİZİLERİ UYGULAMALARI Klavyeden küçük harflerle girilen bir cümlenin harflerini BÜYÜK- KÜÇÜK şeklinde tekrar yazdıran program. KARAKTER DİZİLERİ UYGULAMALARI Klavyeden küçük harflerle girilen bir cümlede, yine klavyeden girilen bir harften kaç tane olduğunu sayıp bunların yerlerini gösteren program. 24
KARAKTER DİZİLERİ UYGULAMALARI Klavyeden büyük harflerle girilen bir cümlede kaç tane sesli harf olduğunu sayan program. KARAKTER DİZİLERİ UYGULAMALARI Klavyeden girilen bir mesajı MORSE Alfabesiyle kodlayarak tekrar ekrana yazdıran program. Morse alfabesi 1832 yılında Samuel Morse tarafından telgraf sisteminde kullanılmak için geliştirilmiştir. HARFLER A.- N -. B -... O --- C -.-. P.--. D -.. Q --.- E. R.-. F..-. S... G --. T - H... U..- I.. V...- J.--- W.-- K -.- X -..- L.-.. Y -.-- M -- Z --.. RAKAMLAR 0 ----- 5... 1.---- 6 -... 2..--- 7 --... 3...-- 8 ---.. 4...- 9 ----. 25
KARAKTER DİZİLERİ UYGULAMALARI 26