Bölüm 8 - Karakterler ve Dizgiler İndex 8.1 Giriş 8.2 Dizgiler ve Karakterlerin kuralları 8.3 Karakter İşleme Kütüphanesi 8.4 Dizgi Değiştirme Fonksiyonları 8.5 Standart Input/Output Kütüphane Fonksiyonları 8.6 Dizgi işleme Kütüphanesinin Dizgi işletme Fonksiyonları 8.7 Dizgi Karşılaştırma Fonksiyonları 8.8 Dizgi işleme Kütüphanesinin Arama Fonksiyonları 8.9 Dizgi işleme Kütüphanesinin Hafıza Fonksiyonları 8.10 Dizgi işleme Kütüphanesinin Diğer Fonksiyonları
Bu Bölümde Öğreneceklerimiz: Amaçlar Bu Bölümde Öğreneceklerimiz: Karakter işleme Kütüphanesinin Fonksiyonlarını kullanabilmek (ctype). Standart giriş/çıkış Kütüphanesinin (stdio) Dizgi ve karakter input/output Fonksiyonlarını kullanabilmek Standart Kütüphanesinin (stdlib) Dizgi Değiştirme Fonksiyonlarını kullanabilmek Dizgi işleme Kütüphanesinin (Dizgi/String) Dizgi işlem Fonksiyonlarını kullanabilmek Fonksiyon kütüphanelerinin gücünü yazılımların tekrar kullanılabilmesi olarak anlayabilme.
Bazı Standart Kütüphane Fonksiyonları tanıma 8.1 Giriş Bazı Standart Kütüphane Fonksiyonları tanıma KolayDizgi ve karakter işlemleri Programlar Karakterleri, Dizgileri, metinleri, ve Hafıza bloklarını işleyebilirler Bu teknikler Kelime işlemcileri Sayfa planı yazılımları Dizgicilik programları için kullanılırlar
8.2 Dizgiler ve Karakterler Kuralları Program bloklarını inşa etme Her program anlamlı Karakter gruplarının birbiri ardına gelmesidir karakter sabiti Bir int değeri tek tırnak içerisinde karakter olarak referans edilir 'z' , z’ nin (int) tamsayı değerini temsil eder Dizgiler Karakterlerin serileri tek birim olarak ele alınır Harfleri, sayıları ve özel Karakterleri (*, /, $) içerebilir Dizgi gerçeği /literatürü (Dizgi sabiti) – çift tırnak içerisinde yazılır “Merhaba" Dizgiler Karakterlerin dizileridir Dizgi , ilk karakteri gösteren bir göstergeçtir Dizginin değeri ilk karakterin adresidir
8.2 Kurallar of Dizgiler ve Karakterler Dizgi Tanımlamaları Define as bir karakter dizisi veya bir char * tipinin değişkeni olarak tanımlama char color[] = “mavi"; char *colorPtr = “mavi”; Dizgilerin, sonu '\0' ile iten karakter dizileri olarak temsil edildiğini hatırlayın color 5 elemana sahiptir Dizgilere Giriş yapma Scanf kullanımı scanf("%s", word); Kopyaları word[] içerisine yerleştirir & ihtiyaç yoktur (çünkü bir Dizgi bir göstergeçtir) '\0‘ için dizideki yerini terk etmesini hatırlayın
8.3 karakter işleme Kütüphane Karakter işleme Kütüphanesi Faydalı testleri ve karakter verilerinin kullanımlarını uygulamak için Fonksiyonlar içerir Her Fonksiyon, bir karakter (bir int) veya EOF argüman olarak içerir Bir sonraki slayt bütün fonksiyonların bir tablosunu içeriyor <ctype.h>
8.3 karakter işleme Kütüphane
fig08_02.c (Part 1 of 2)
fig08_02.c (Part 2 of 2)
Program Output isdigit’e göre: 8 , sayisidir # , sayisi değildir isalpha ’e göre : A , harfidir b , harfidir & , harfi değildir 4 , harfi değildir isalnum ’e göre : A , sayi veya harfdir 8 , sayi veya harfdir # , sayi veya harfi değildir isxdigit ’e göre : F , hexadecimal sayidir J , hexadecimal sayi değildir 7 , hexadecimal sayidir $ , hexadecimal sayi değildir f , hexadecimal sayidir Program Output
fig08_03.c (Part 1 of 2)
fig08_03.c (Part 2 of 2) Program Output Islower ‘e göre: p küçük harftir P küçük harf değildir 5 küçük harf değildir ! küçük harf değildir isupper ‘e göre : D büyük harftir d büyük harf değildir 8 büyük harf değildir $ büyük harf değildir U, büyük harf U’ya dönüştürüldü 7, büyük harf 7’ye dönüştürüldü $, büyük harf $’a dönüştürüldü L, küçük harf l’ye dönüştürüldü
fig08_04.c (Part 1 of 2)
fig08_04.c (Part 2 of 2)
Program Output Isspace’e göre: Yeni satir bir beyaz-bosluk karakteridir yatay tab is a beyaz-bosluk karakter % is not a beyaz-bosluk karakter Iscntrl’e göre: yeni satir kontrol karakterdir $ kontrol karakteri değildir Ispunct’e göre: ; noktalı virgül karakteridir Y noktalı virgül karakter değildir # noktalı virgül karakter değildir Isprint’e göre: $ baski karakterdir Alert baski karakteri değildir Isgraph’e göre: Q boşluk karakterinden farklı baski karakteri Space boşluk karakterinden farklı baski karakteri değildir Program Output
8.4 Dizgi Değiştirme Fonksiyonlar In<stdlib.h> (Standart Kütüphanesi) Sayıların Dizgilerini tamsayi ve virgüllü sayı değerlerine çevirme
fig 08_06.c Program Output Dizgi "99.0“, 99.000 olarak tutulur Tutulan değerin 2’ye bölümü 49.500
fig08_07.c Program Output 2593 dizgisi (int) tamsayisina 2593’e dönüstürüldü dönüstürülen deger eksi 593 esittir 2000
fig08_08.c Program Output “1000000" dizgisi long’a 1000000 olarak dönüstürüldü dönüstürülen degerin 2’ye bölümü 500000
fig08_09.c Program Output "51.2% kabul edilir" Dizgisi double deger 51.20 ve "% kabul edilir“ Dizgisine dönüstürülmüstür
fig08_10.c Program Output Orjinal dizgi "-1234567abc" dir Dönüstürülen değer -1234567 dir Orjinal dizginin kalanı "abc“ dir Dönüstürülen değer artı 567 -1234000 dir
fig08_11.c Program Output Orjinal dizgi "-1234567abc" dir Dönüstürülen değer -1234567 dir Orjinal dizginin kalanı "abc“ dir Dönüstürülen değer artı 567 -1234000 dir
8.5 Standard Input/Output Kütüphane Fonksiyonları <stdio.h> Fonksiyonları karakter ve veri dizgisi kullanma
fig08_13.c (Part 1 of 2)
fig08_13.c (Part 1 of 2) Program Output Bir metin girin: Karakterler ve Dizgiler Metnin tersten yazılımı: religziD ev relretkaraK Bir metin girin : able was I ere I saw elba Metnin tersten yazılımı
fig8_14.c
Bir metin girin: Bu bir denemedir. Girilen metin: Program Output
fig08_15.c Program Output bir (int) ve (double) sayi girin : 298 87.375 s dizisinde tutulan biçimlendirilmiş cıktı: : İnt : 298 double: 87.38
fig08_16.c Program Output s karakter dizisinde tutulan değerler : int : 31298 double: 87.375
8.6 Dizgi işleme Kütüphanesinin Dizgi Elde etme Fonksiyonları Dizgi işleme Kütüphane şu Fonksiyonlara sahiptir Veri Dizgisi elde etme Arama Dizgileri Dizgiyi mantıklı parçalara bölmek Dizgi boyu tanımlama
fig08_18.c Program Output x dizisindeki Dizgi: Mutlu yıllar y dizisindeki Dizgi : Mutlu yıllar z dizisindeki Dizgi : Mutlu yıllar
fig08_19.c
Program Output s1 = Mutlu s2 = yeni yıllar strcat( s1, s2 ) = Mutlu yeni yıllar strncat( s3, s1, 6 ) = Mutlu strcat( s3, s1 ) = Mutlu Mutlu yeni yıllar Program Output
8.7 Dizgi işleme Kütüphanesinin Karşılaştırma Fonksiyonlar Karşılaştırma Dizgileri Bilgisayar Dizgi içindeki Karakterlerin sayısal ASCII kodlarını karşılaştırır Bölüm D karakter kodlarının bir listesine sahiptir int strcmp( const char *s1, const char *s2 ); s1 Dizgisini s2 ile karşılaştırır Eğer s1 < s2 ise bir negatif sayıyı, s1 == s2 ise sıfır veya s1 > s2 ise bir pozitif sayıyı geriye döndürür int strncmp( const char *s1, const char *s2, size_t n ); s1 ile s2 Dizginin n Karakterlerine kadar karşılaştırır Geriye yukarıdaki gibi değer döndürür.
fig08_21.c
Program Output s1 = Mutlu yeni yıllar s2 = Mutlu yeni yıllar s3 = Mutlu tatiller strcmp(s1, s2) = 0 strcmp(s1, s3) = 1 strcmp(s3, s1) = -1 strncmp(s1, s3, 6) = 0 strncmp(s1, s3, 7) = 1 strncmp(s3, s1, 7) = -1 Program Output
8.8 Dizgi işleme Kütüphanesinin Arama Fonksiyonları
fig08_23.c (Part 1 of 2)
fig08_23.c (Part 2 of 2) Program Output “bu bir metindir“ icesinde ‘i’ karakteri bulundu. “bu bir metindir“ icesinde ‘z’ karakteri bulunamadı.
fig08_24.c Program Output string1 = deger 3.14159 dir string1’in baslangıc uzunlugu string2 den hiçbir karakter icermemektedir = 13
fig08_25.c Program Output “sakımak“icindeki karakterlerden m “bu bir metindir” ’de görülen ilk karakterdir
fig08_26.c Program Output The remainder of string1 beginning with the last occurrence of karakter 'z' is: "zebras"
fig08_27.c Program Output string1 = The value is 3.14159 string2 = aehi lsTuv string1’in baslangıc uzunlugu string2 den sadece = 13 karakter icermektedir
fig08_28.c Program Output string1 = abcdefabcdef string2 = def string1’in kalanı string2’nin ilk olusumu ile baslıyor : defabcdef
fig08_29.c
Program Output Dizginin belirtgeci : Bu 7 belirtke ile birlesmis bir cumledir belirtkeler: Bu 7 belirtke ile birleşmiş bir cumledir Program Output
8.9 Dizgi- işleme Kütüphanesinin Hafıza Fonksiyonları <stdlib.h> içinde İşleme, karşılaştırma, ve Hafıza’nın Arama blokları Herhangi veri bloklarını işleyebilir Gösterici parametreleri void * dir Any pointer can be assigned to ve vice versa Herhangi bir gösterici void * ve tam tersi olarak atanabilir void * cannot be dereferenced Her Fonksiyon işlemciye bit (Karakterler) sayıları belirtilmiş bir argümanı alır
8.9 Dizgi işleme Kütüphanesinin Hafıza Fonksiyonları
fig08_31.c Program Output After s2 is copied into s1 with memcpy, s1 contains "Copy this Dizgi"
fig08_32.c Program Output Memmove ‘dan önce x dizisindeki Dizgi: Home Sweet Home Memmove ‘dan sonra x dizisindeki Dizgi : Sweet Home Home
fig08_33.c Program Output s1 = ABCDEFG s2 = ABCDXYZ memcmp( s1, s2, 4 ) = 0 memcmp( s1, s2, 7 ) = -1 memcmp( s2, s1, 7 ) = 1
Fig8_34.c Program Output ‘g‘ karakterinden sonra s den kalan “gidir“
8.10 Dizgi işleme Kütüphanesinin Diğer Fonksiyonları char *strerror( int errornum ); errornum temelli hata mesajına bağlı bir sistem oluşturur. Dizgiye bir gösterici döndürür size_t strlen( const char *s ); Dizgisi içerisindeki Karakterlerin (NULL dan önce) sayısını geriye döndürür
fig08_35.c Program Output string1 = BBBBBBBBBBBBBB memset’ten sonra string1 = bbbbbbbBBBBBBB
fig08_37.c Program Output No such file or directory
fig08_38.c Program Output "abcdefghijklmnopqrstuvwxyz" ’in uzunlugu 26 "four“ ’in uzunlugu 4 "Boston" ’in uzunlugu 6