You are on page 1of 23

ELN1002 – BİLGİSAYAR

PROGRAMLAMA 2

KARAKTERLER
KARAKTER DİZİLERİ (STRING)

Sunu Planı
 Karakterler ve Stringler
 Karakter İşleme Kütüphanesi
 String Dönüşüm Fonksiyonları
 Standart Giriş/Çıkış Kütüphane Fonksiyonları
 String Kütüphanesinin String İşleme Fonksiyonları
 String Kütüphanesinin Karşılaştırma Fonksiyonları
 String Kütüphanesinin Arama Fonksiyonları
 String Kütüphanesinin Bellek Fonksiyonları
 String Kütüphanesinin Diğer Fonksiyonları

1
Karakterler
 Karakterler, bilgisayar programlarının en temel yapı
taşlarından birisidir.
 Arda arda anlamlı bir şekilde yerleştirilerek kelimeleri,
kelimeler arda yerleştirilerek yazıları oluşturur.
 C programlama dizilerinde karakterler, karakter dizilerinin
içinde tutulurlar.
 Karakter dizilerinin sonuna, genellikle NULL karakteri
yerleştirilir.
 Karakter sabiti, tırnak içinde ifade edilen karakteri temsil
eden bir tamsayı değeridir.
 ‘z’  z‟nin ASCII değeri : 122
 ‘\n’  ASCII değeri : 10

String
 C Programlama dilinde string, „\0‟ – NULL karakteri ile
sonlanan karakter dizilerine verilen isimdir.
 String, tek bir birim olarak düşünülebilecek bir karakter
dizisidir.
 String, harfleri, rakamları ve özel karakterleri içerebilir.
 String sabitleri, C programlama dilinde çift tırnak ile yazılır:
 “Elektronik Muhendisligi”
 “Oda No : 432”
 “Gorukle, Bursa”
 “(224) 294 20 01”

2
String
 String‟e string‟in ilk karakterini gösteren bir işaretçi ile
erişilebilir.
 String‟in değeri, ilk karakterinin adresidir.
 Bundan dolayı, C programlama dilinde, string‟i bir işaretçi
olarak görmek doğru olacaktır, string‟in ilk karakterine
işaret eden bir işaretçidir.
 Bu anlamda, string bir dizi gibidir, diziler de ilk
elemanlarının değerlerini gösterir.
 Bir karakter dizisi veya char* tipi, tanımlamasında bir
string‟i ilk değer olarak alabilir. m
 char mavi[] = “mavi”; a
 const char *mavi_ptr = “mavi” v
 char mavi[] = {„m‟, „a‟, „v‟, „i‟, „\0‟} i
\0

String
 „\0‟ karakterini içermeyen string‟leri ekrana yazdırmaya çalışmak
bir hatadır.
 Bir karakter dizisine bellekte, „\0‟ karakterini içermesini
engelleyecek kadar az yer ayrılması bir hatadır.
char yazi[20];

scanf(“%s”, yazi);
 yazi değişkeni bir dizi olduğu için & opeartörüne ihtiyaç yoktur.
 scanf boşluk, tab, „\n‟ veya EOF karakterleriyle karşılaşana
kadar tüm karakterleri okur.
 Örneğimizde, 19 karakterden daha fazla karakter sayısına sahip
bir giriş, programın hata üretmesine sebep olur.
 Bunu aşmanın yolu, %19s dönüşüm belirtecinin kullanılmasıdır.
Bu yöntemle, ayrılan bellek bölgesinin taşarak takip eden
alanlara bilgi yazılması engellenmiş olur.

3
Karakter İşleme Kütüphanesi
 Karakter işleme kütüphanesi, karakter verisi üzerinde
faydalı bir takım testler veya işlemler
gerçekleştirebileceğimiz çeşitli fonksiyonlar içerir.
 Her fonksiyon giriş olarak – tamsayı ile temsil edilen – bir
karakter veya EOF alır.
 Daha önce de belirtildiği gibi, karakterler çoğu zaman bir
tamsayı gibi işlenir, çünkü C‟de karakter genellikle 1
baytlık bir tamsayıdır.
 Standart karakter işleme kütüphanesi, ctype.h olarak
adlandırılmıştır

Karakter İşleme Kütüphanesi


PROTOTİP FONKSİYON AÇIKLAMASI
c karakteri bir sayı ise doğru (1) değil ise yanlış (0)
int isdigit(int c)
değerini döndürür.
c karakteri bir harf ise doğru (1) değil ise yanlış (0)
int isalpha(int c)
değerini döndürür.
c karakteri bir harf veya sayı ise doğru (1) değil ise
int isalnum(int c)
yanlış (0) değerini döndürür.
c karakteri bir hexadesimal (onaltılık sayı) ise doğru
int isxdigit(int c)
(1) değil ise yanlış (0) değerini döndürür.
c karakteri bir küçük harf ise doğru (1) değil ise yanlış
int islower(int c)
(0) değerini döndürür.
c karakteri bir büyük harf ise doğru (1) değil ise yanlış
int isupper(int c)
(0) değerini döndürür.
c karakteri eğer beyaz boşluk karakteri („ „, „\n‟, „\f‟, „\r‟,
int isspace(int c) „\t‟, „\v‟ ) ise doğru (1) değil ise yanlış (0) değerini
döndürür.

4
Karakter İşleme Kütüphanesi
PROTOTİP FONKSİYON AÇIKLAMASI
c karakteri kontrol karakteri ise doğru (1) değil ise
int iscntrl(int c)
yanlış (0) değerini döndürür.
c karakteri harf, sayı veya boşluktan başka herhangi
int ispunct(int c) bir yazılabilir karakter ise doğru (1) değil ise yanlış (0)
değerini döndürür.
c karakteri „ „ karakterini de içeren yazılabilir bir
int isprint(int c) karakter ise doğru (1) değil ise yanlış (0) değerini
döndürür.
Eğer c karakteri büyük harf ise, bu karakteri küçük
int tolowerint c)
harfe dönüştürür, aksi takdirde işlem yapmaz.
Eğer c karakteri küçük harf ise, bu karakteri büyük
int toupper(int c)
harfe dönüştürür, aksi takdirde işlem yapmaz.

Karakter Tipleri
 Beyaz boşluk(whitespace) karakterleri:
 „ ‟, „\f‟, „\n‟, „\r‟, „\t‟, „\v‟  isspace
 Kontrol Karakterleri:
 „\t‟, „\v‟, „\f‟, „\a‟, „\b‟, „\r‟, „\n‟  iscntrl
 Boşluk, sayı veya harfin dışındaki yazılabilir
karakterler:
 „$‟, „#‟, „(„, „)‟, „[‟, „]‟, „{‟, „}‟, „;‟, „:‟, „%‟  ispunct
 Ekrana basılabilen tüm karakterler
 isprint (boşluk dahil)
 Ekrana basılabilen tüm karakterler
 isgraph (boşluk hariç)

5
Örnek

String Dönüşüm Fonksiyonları


 Bu bölümde stdlib.h kütüphanesinden gelen
fonksiyonlar üzerinden durulacaktır.
 Bu fonksiyonlar stringleri tamsayı(integer)
veya kayar noktalı(floating point) sayı
değerlerine dönüştürmektedir.

6
String Dönüşüm Kütüphanesi
PROTOTİP FONKSİYON AÇIKLAMASI
double atof(const char *nPtr); nPtr string‟ini double tipine dönüştürür.
int atoi(const char *nPtr); nPtr stringini int tipine dönüştürür.
int atol(const char *nPtr); nPtr stringini long int tipine dönüştürür.
double strtod(const char *nPtr, char nPtr string‟ini double tipine dönüştürür.
**endPtr);
long strtol(const char *nPtr, char nPtr stringini long tipine dönüştürür.
**endPtr, int base);
unsigned long strtoul(const char nPtr stringini unsigned long tipine
*nPtr, char **endPtr, int base); dönüştürür.

atof

7
atoi

atol

8
strtod

strtol

9
Standart G/Ç Kütüphanesi – stdio.h
PROTOTİP FONKSİYON AÇIKLAMASI
Stdin‟den gelen bir sonraki karakteri alır ve bir
int getchar(void);
tamsayı olarak döndürür.
EOF veya \n ile karşılaşana kadar stdin‟den gelen
karakterler s dizisinin içine alır. Diziye bir \0
char *gets(char *s);
karakteri eklenir. s içine yazılan diziyi döndürür. s
diziyi tutacak kadar büyük değilse hata oluşacaktır.
c‟de tutulan karakteri ekrana yazdırır ve tamsayı
int putchar(int c);
değerini döndürür.
s stringini ve onu takiben \n karakterini yazdırır.
int puts(const char *s) Başarılı olursa 0 olmayan bir tamsayı döndürür,
tersi durumunda EOF döndürür.

Standart G/Ç Kütüphanesi – stdio.h


PROTOTİP FONKSİYON AÇIKLAMASI
printf‟le özdeştir fakat, çıkış ekrana yazdırılmak
int sprintf(char *s, const yerine bir dizinin içine yazdırılır. Başarılı olursa s
char *format, … ); içine yazdırılan karakterlerin sayısını, başarısız
olursa EOF döndürür.
scanf‟le özdeştir fakat, giriş klavye yerine bir s
int sscanf(char *s, const dizisinden okunur. Başarılı olursa fonksiyon
char *format, … ); tarafından okunan karakterlerin sayısını, başarısız
olursa EOF döndürür.

10
sprintf

sscanf

11
<string.h> kütüphanesi string
işleme komutları
PROTOTİP FONKSİYON AÇIKLAMASI
char *strcopy(char *s1, s2 string‟ini s1 dizisine kopyalar. s1‟in değeri
const char *s2) döndürülür.
char *strncopy(char *s1, s2 stringinin en çok n karakterini s1 dizisine
const char *s2, size_t n) kopyalar. s1 değerini döndürür.
s1 dizisine s2 stringini ekler. s1 dizisinin „\0‟
char *strcat(char *s1,
karakterinin yerine s2 stringinin ilk karakteri
const char *s2)
döndürülür. s1 dizisinin değeri döndürülür.
s1 dizisine s2 stringinin en çok n karakterini ekler.
char *strncat(char *s1,
s1 dizisinin „\0‟ karakterinin yerine s2 stringinin ilk
const char *s2, size_t n)
karakteri döndürülür. s1 dizisinin değeri döndürülür.

strcopy ve strncopy

12
strcat ve strncat

Karşılaştırma Fonksiyonları
PROTOTİP FONKSİYON AÇIKLAMASI
s1 stringini s2 string‟iyle karşılaştırır.
Dönüş değeri:
int strcmp(const char *s1,
= 0  eşitlik varsa
const char *s2);
> 0  s1 s2‟den büyükse
< 0  s1 s2‟den küçükse
s1 stringinin n karakterini s2 string‟iyle
karşılaştırır.
int strncmp(const char *s1, Dönüş değeri:
const char *s2, size_t n) = 0  eşitlik varsa
> 0  s1 s2‟den büyükse
< 0  s1 s2‟den küçükse

13
strcmp ve strncmp

Arama Fonksiyonları
PROTOTİP FONKSİYON AÇIKLAMASI
c karakterinin s string‟i içindeki ilk kullanımını bulur.
char *strchar(const char Eğer c bulunduysa, c‟nin s içindeki yerini işaret
*s, int c); eden bir işaretçi döndürür, değilse NULL işaretçi
döndürülür.
size_t strcspn(const char s1 dizisi içinde s2 dizisinden herhangi bir elemanı
*s1, const char *s2); içermeyen başlangıç parçasının uzunluğunu verir.
size_t strspn(const char s1 dizisi içinde s2 dizisindeki elemanların kaç kere
*s1, const char *s2); kullanıldığınının sayısını verir.
s2 stringinden herhangi bir karakterin s1 stringi
içindeki ilk kullanımını bulur. s2 stringinden
char *strpbrk(const char
karakterle s1 stringi içinde ilk karşılaşıldığında, s1
*s1, const char *s2);
içindeki karakterin yerini işaret eden bir işaretçi
döndürülür. Aksi takdirde NULL işaretçi döndürülür.

14
strchr

strcspn

15
strspn

strpbrk

16
Arama Fonksiyonları
PROTOTİP FONKSİYON AÇIKLAMASI
c karakterinin s string‟i içindeki son kullanımını
char *strrchar(const char bulur. Eğer c bulunduysa, c‟nin s içindeki yerini
*s, int c); işaret eden bir işaretçi döndürür, değilse NULL
işaretçi döndürülür.
s2 stringinin s1 stringi içindeki ilk kullanımını bulur.
char *strstr(const char Eğer bulunduysa s1 içindeki string‟i işaret eden bir
*s1, const char *s2); işaretçi döndürülür. Aksi takdirde NULL işaretçi
döndürülür.
strtok fonksiyona yapılan bir dizi çağrı, s1 stringini
s2 stringinde içerilen karakterlerle parçalara böler.
İlk çağrı s1‟i ilk argüman olarak içerir, ardından
char *strtok(char *s1, gelen çağrılar aynı stringi ilk argümanı olarak
const char *s2); NULL içerecek şekilde parçalamaya devam eder.
Her çağrıyla geçerli parçaya bir işaretçi döndürülür.
Eğer yeni bir parça oluşturulamıyorsa, NULL
döndürülür.

strrchar

17
strstr

strtok

18
Bellek Fonksiyonları
PROTOTİP FONKSİYON AÇIKLAMASI
s2 tarafından gösterilen n karakterlik veri bloğunu s1
void *memcpy(void *s1,
tarafından işaret edilen veri bloğuna kopyalar.
const void *s2, size_t n);
Sonuç veri bloğuna bir işaretçi döndürür.
s2 tarafından gösterilen n karakterlik veri bloğunu s1
tarafından işaret edilen veri bloğuna kopyalar.
Kopyalama işlemi, veri bloğunun önce s2
void *memmove(void *s1,
işaretçisinin gösterdiği yerden geçici bir diziye daha
const void *s2, size_t n);
sonra geçici diziden s1 işaretçisinin gösterdiği yere
kopyalanması şeklinde gerçekleştirilir. Sonuç veri
bloğuna bir işaretçi döndürür.
s1 ve s2 işaretçileri tarafından işaret edilen veri
bloklarının ilk n karakterini karşılaştırır.
int memcmp(const void *s1, Dönüş değeri:
const void *s2, size_t n); = 0 eşitlik varsa
> 0 s1‟in gösterdiği s2‟nin gösterdiğinden büyükse
< 0 s1‟in gösterdiği s2‟nin gösterdiğinden küçükse

memcpy

19
memmove

memcmp

20
Bellek Fonksiyonları
PROTOTİP FONKSİYON AÇIKLAMASI
s işaretçisiyle işaret edilen veri bloğunun ilk n
karakteri içinde c karakterinin(unsigned char‟a
void *memchr(const void dönüştürülmüş) ilk kullanımını bulur. Eğer c
*s, int c, size_t n); bulunursa, veri bloğu içinde c‟nin yerini gösteren
bir işaretçi döndürülür. Aksi takdirde, NULL
döndürülür.
s tarafından işaret edilen veri bloğunun ilk n
void *memset(void *s, int c, karakterinin yerine c karakterini(unsigned char‟a
size_t n); dönüştürülmüş) yazar. Sonuca işaret eden bir
işaretçi döndürülür.

memchr

21
memset

Diğer Fonksiyonlar
PROTOTİP FONKSİYON AÇIKLAMASI
s stringinin uzunluğunu bulur. NULL karakterinden
size_t strlen(const char *s)
önceki tüm karakterlerin sayısı döndürülür.

22
strlen

23

You might also like