|
Standart String Fonksiyonları(string.h) |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu
yazımızda C ile yazılan uygulamalarda en sık karşımıza çıkan prototipleri
başlık dosyasında bulunan standart fonksiyonları tanıyacağız.Temel olarak fonksiyonun
ne yapatığı hakkında kısa bir bilgi verildikten sonra, fonksiyonu tekrar kendimiz
yazacağız.(Belki bir gün string.h dosyası aniden bozulurda işimiz yarıda kalırsa
bu yazacağımız fonksiyonları güvenle kullanabilirsiniz.)
String.h başlık dosyasında bulunan bu fonksiyonların hemen hemen hepsi bir yazının
başlangıç adresini alarak yazı ile ilgili işlem yapar yada yazı hakkında bir
takım bilgileri geri döndürür. Bu fonksiyonların tanıtımına geçmeden yazıların
başlangıç adreslerinin nasıl verildiğini ve klasik algoritmalara değinelim.
Bildiğiniz gibi C dilinde karekterler temel olarak 1 byte uzunluğunda olan char
veri türü ile temsil edilirler. Yazılar karekterlerden oluştuğu için, yazıları
char türden göstericiler ile göstermemiz mümkündür. C de yazılaı temel olarak
iki biçimde gösterebiliriz.
1) char türden diziler ile
char yazi[20] = "csharpnedir";
2)
char türden göstericiler ile;
char
* p = "csharpnedir"
NOT: C dilinde string dediğimiz ifadeler birer adrestir. 2. şekildeki gösterimde
p adresinin gösterdiği yerde c karekteri, (p+1). adreste s karekteri, (p+2).
adreste h akarekteri vardır ve son olarak (p+11). adreste ise yazının sonunu
gösteren NULL karekter vardır. 1. gçsterimde ise yazi[11]=NULL dır.
String fonksiyonlarını yazarken yazının sonuna geldiğimizi anlamak için char
türden göstericiyi birer birer artırıp NULL karekter olup olmadığını kontrol
edeceğiz. Aşağıdaki formu hemen hemen bütün fonksiyonları yazarken kullanacağız.
char* p = "seferalgan";
while ( *p != \0)
{
BirSeyleryap();
p++; //bir sonraki
karekteri gösterecek şekilde ayarlıyoruz.
}
Şimdi bu fonksiyonları inceleyelim.
strlen fonksiyonu
Yazının kaç karekter uzunlukta olduğunu bulan fonksiyonun prototipi aşağıdaki
gibidir.
unsigned
int strlen (char *str)
Fonksiyon uzunluğu belirlenecek yazının başlangıç adresini parametre olarak
alır ve geriye yazının uzunluğunu dödürür.
unsigned bizimStrLen(char
* str)
{
unsigned uzunluk;
while (*str != \0){
++uzunluk;
++str;
}
return uzunluk;
} |
strchr
fonksiyonu
strchr "string character" sözcüklerinin kısa biçimidir. Bir karekter
dizisi(yazi) içinde belli bir karekteri aramak için kullanılan fonksiyodur.Prototipi
aşağıdaki gibidir.
char *
strchar (char *str, char ch)
İkinci paramtere ile belirtirln karakteri str adresinden başlayarak arar. ch
karakterinin ilk görüldüğü yernin başlangıç adresini geri döndürür. Eğer ch
karekteri yazı içinde yoksa bu sefer geri dönüş değeri NULL olmaktadır.
char* bizimStrChr(char
* str, char ch)
{
unsigned uzunluk;
while (*str != \0){
if (ch = *str)
return
str;
++str;
}
if (ch == \0)
return
str;
return NULL;
} |
strcpy fonksiyonu
strcpy, String ve Copy sözcüklerinin kısaltılmış halidir. Fonksiyonun ikinci
parametresinde bulunan yazının başlangıç adresinden başlayarak ,birinci paramteresinde
bulunan adrese NULL karekter de dahil olmak üzere kopyalar. Prototipi şöyledir;
char *
strcpy (char *hedef , char * kaynak)
Fonksiyonun geri dönüş değeri kopyalamanın yapıldığı hedef adresidir.
char bizimStrCpy(char
* hedef, char * kaynak)
{
int i ;
for (i=0 ; (hedef[i] = kaynak[i]) != \0
; ++i)
;
return dest;
} |
strcat
fonksiyonu
Fonksiyon ismini "String" ve "Concatanate" sözcüklerinden
alır. Bu fonksiyon bir karekter dizisini başka bir karekter dizisinin sonuna
eklemek için kullanılır. Prototipi şu şekildedir;
char *
strcat (char *str, char *ek)
Fonksiyonda parametre olarak belirtilen birinci yazının sonuna ikinci paramterede
belirtilen yazı eklenerek, eklemenin yapıldığı adres yani str adresi geri döndürülür.Bu
fonksiyonu kendimiz yazmamız için önce str yazısının sonuna kadar gitmemiz sonrada
ek teki yazıyı str nin sonundan itibaren kopyalamamız gerekir.
char * bizimStrCat(char
* str , char* ek)
{
char * gecici = str ;
while (*str != \0)
++str;
while ((*str++ == *ek++) != \0) //burda
bizimStrCpy() fonksiyonunuda kullanabilirdik
;
return gecici ;
} |
strset
fonksiyonu
Bir karekter dizisinin belirli bir karekter ile doldurulmasını sağlar. Prototipi
aşağıdaki gibidir
char *
strset (char *str , char ch)
Yazının NULL karekterine dokunmayacak şekilde str adresinden itibaren NULL karekter
görene kadar bütün karekterleri ch ile doldurur.Geri dönüş değeri doldurulmaya
başlanan adrestir.
char * bizimStrSet(char
* str , char ch)
{
char * gecici = str ;
while (*str != \0){
*str = ch;
++str;
}
return gecici ;
} |
strcmp
fonksiyonu
Fonksiyonun ismi String ve Compare sözcüklerinin kısaltılmış halidir. Parametre
olarak verilen iki yazı dizisinin ASCII karekter tablosuna göre karşılaştırır.
Küçük harfler ASCII tablosunda büyük harflerden daha sonra geldiği için "sefer"
yazısı "SEFER" yazısından daha büyüktür. "Mehmet" yazısı
"Metin" yazısından daha küçüktür, çünkü eşitliği bozan h karakteri
t karekterinden daha önce gelmektedir. Prototipi aşağıdaki gibidir
int
strcmp (char *str1 , char * str2)
Parametre ile verilen iki yazı karşılaştırılır ve geri dönüş değeri, birinci
yazı ikinci yazıdan büyükse pozitif bir değere, birinci yazı ikinci yazıdan
daha küçükse negatif bir değere , birinci yazı ve ikinci yazı eşit ise sıfır
dır.
int bizimStrCmp(char
* str1 , char * str2)
{
while (*str1 == *str2){
if (*str1 == \0)
return
0 ;
++str1;
++str2;
}
return *str1 - *str2;
} |
strrev
fonksiyonu
Fonksiyonun ismi String ve Reverse sözcüklerinin kısaltılmış halidir. Parametre
olarak verilen yazı dizisini ters çevirmek için kullanılır. Prototipi aşağıdaki
gibidir
char *
strrev (char *str)
Parametre ile verilen yazıyı ters çevirererek tersine çavrilmiş halinin başlangıç
adresini geri döndürür.
char * bizimStrRev(char
* str)
{
int i;
char gecici;
int uzunluk = bizimStrLen(str);
// burda asıl amacımızdan uzaklaşmamak için yine bizim yazdığımız fonksiyonu
kullandım
for (i=0 ; i < uzunluk / 2 ; ++i){
gecici = str[i];
str[i] = str[uzunluk - i
- 1];
str[uzunluk - i - 1] = gecici;
}
return str;
} |
strncpy
fonksiyonu
Fonksiyonun ismi "String" ve "number copy" sözcüklerinin
kısaltılmış halidir. Fonksiyon 1. parametresinde adresi tutulan yazıya, 2. parametresinde
tutulan yazıdan, 3.parametre ile verilen sayı kadar karekteri kopyalar.Fonksiyonun
geri dönüş değeri kopyalamanın yapılcağı adrestir. Prototipi aşağıdaki gibidir.
char *
strncpy (char *hedef , char * kaynak , int n)
Bu fonksiyond dikkat edilmesi gereken hususlar:
3.Paramtere ile verilen sayı kopyalanacak yazının uzunluğundan daha küçük yada
eşitse kopyalama sonucunda, hedef dizinin sonuna NULL karekter eklenmeyecektir.
Eğer n sayısı kopyalanacak yazının uzunluğundan daha büyük ise artan karekterlerin
yerine birinci dizenin sonuna NULL karekterler eklenir.
char
*
bizimStrnCpy (char *hedef , char * kaynak , int n)
{
int i;
for (i=0 ; i < n && kaynak[i] !=
\0 ; ++i)
hedef[i] = kaynak[i];
if (n > i);
hedef[i] = \0;
return hedef;
} |
strncat
fonksiyonu
Fonksiyonun ismi "String" ve "number concatanate" sözcüklerinin
kısaltılmış halidir. Fonksiyon 1. parametresinde adresi tutulan yazının sonuna,
2. parametresinde tutulan yazıdan, 3.parametre ile verilen sayı kadar karekteri
ekler.Fonksiyonun geri dönüş değeri kopyalamanın yapılcağı adrestir. Prototipi
aşağıdaki gibidir.
char *
strncat (char *str , char * ek , int n)
char
*
bizimStrnCat (char *str , char * ek , int n)
{
char * gecici = str ;
int i ;
while (*str != \0)
++str;
for (i =0 ; i < n ; ++i){
*str = *ek;
++str;
++ek;
}
str = \0;
return gecici ;
} |
strstr
fonksiyonu
Fonksiyon bir yazı içinde başka bir yazıyı başka bir yazı içinde aramak için
kullanılır. Arama işlemi büyük ve küçük harf duyarlıdır. Prototipi aşağıdaki
gibidir.
char *
strstr (char *str1 , char * str2)
Fonksiyon aranan yazıyı bulursa, bulunan yazının başladığı adrese geri döner,
eğer yazı bulunamazsa NULL adresine geri döner.
char
*
bizimStrStr (char *str1 , char str2)
{
int len1, len2 ;
int i,j ;
len1 = bizimStrLen(len1);
len2 = bizimStrLen(len2);
for (i =0 ;len1 - i >= len2 ; ++i,++str1){
for (j =0 ; str1[j]==str2[j]
; ++j)
if
(str2[j+1] == \0)
return
str1
}
return NULL ;
} |
strupr
ve strlwr fonksiyonları
Bu fonksiyonlar aslında standart fonksiyonlar değildirler. Ama popüler derleyicilerin
hemen hemen hepsinde bulunurlar. Bu yüzden bizde burda değinmek istedim. Adlarındanda
anlaşıldığı gibi bu fonksiyonlar büyük-küçük harf dönüşümü yaparlar. Bu fonksiyonlar
İngiliz alfabesine göre düzenlendiği için Türkçe karekterler içieren dizgelerde
istenmeyen sonuçlar alırız, bu yüzden Türkçe desteği veren bir fonksiyonu kendimiz
yazmak zorundayız.Bu fonksiyonların prototipleri aşağıdaki gibidir.
char *
strupr (char *str)
char *
strlwr (char *str)
char
*
bizimStrUpr (char *str)
{
char * gecici = str ;
while (*str != \0){
if (islower(*str))
*str
= toupper(*str);
++str;
}
return gecici ;
}
char
*
bizimStrLwr (char *str)
{
char * gecici = str ;
while (*str != \0){
if (isupper(*str))
*str
= tolower(*str);
++str;
}
return gecici ;
} |
Makale:
Standart String Fonksiyonları(string.h) C ve Sistem Programlama Sefer Algan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|