27 Kasım 2017 Pazartesi

String Fonksiyonları


      Stringler harfler,rakamlar veya bazı semboller olan text bilgileri saklamak için kullanılır. Stringler char tipinde karakter dizileridir. Stringler C'de <string.h> kütüphanesi içindedir.C'de stringler için özel bir tip yoktur.Bu yüzden stringlere sizi olarak bakılır.Genel olarak stringleri

                               char string_adi[eleman_sayısı]

biçiminde gösteriyoruz.Örneğin kullanıcının girmesini istiyorsak

                               char isim[20]

şeklinde programa başlarken belirtmeliyiz.

Stringlere Başlangıç Değer Atama 

       Stringlere dizi olarak baktığımız için onlara da diğer dizilerdeki gibi başlangıç değeri atayabiliriz. Yanlız stringlere başlangıç değer atarken bir şeye dikkat etmeliyiz. Stringlere başlangıç değeri atarken stringin uzunluğuna dikkat etmeliyiz çünkü stringlerin sonunda bir '\0'(NULL) karakteri belirtmez veya uzunluğu az verirsek yazdırılırken bellek yanlış bilgileri yazar.

                            char isim[4]={'a','y','s','e','\0'};

                            char isim[4]='ayse' ;

Yukarıda gösterilen iki bildirim aynı anlama gelmektedir.

      Bir karakter dizisinin kaç elemanlı olduğunu belirtmezsek, başlangıçta bildirilen karakter sayısını dikkate alarak dizinin eleman sayısının o kadar olduğunu varsayar.

                           char isim[ ]='ayse'; /* 4 elemanlı */

     Stringler bazen ise bir pointer(işaretçi) ile de gösterilir.

                           char *il="Balikesir"; yada 
   
                           char *il;
                           il="Balikesir"; 
bu şekilde gösterebiliriz.

Çok Boyutlu Diziler

      Elemanları string olan dizileri kolayca oluşturabiliyoruz.Örneğin en uzunu 7 karakter olan 4 farklı isim bir dizide şöyle toplanabilir.

                          char isim[4][8]={"Semra","Asli";"Leyla";"Ayse"};
yada
                          char isim[ ][8]={"Semra";"Asli";"Leyla";"Ayse"};
yada
                          char *isim[4]={"Semra";"Asli";"Leyla";"Ayse"};

       Bu tarz tanımlamalarda birinci boyut(satır) dizinin eleman sayısını, ikinci boyut(sütun) her bir elemanın sahip olabileceği maksimum karakter sayısını gösterir.

Puts() ve Gets() Komutları

       Sadece stringler üzerinde işlem yapan bu fonksiyonlar printf() ve scanf() fonksiyonları gibi klavyeden girilen verileri okuma ve ekrana bilgi yazma amacıyla kullanılır.

                         main(){
                               char isim[20];
                               printf("\n isminizi giriniz:");
                               gets(isim);
                               puts(isim);
                            }
    Yukarıda verdiğim örnekte gets() ve puts() komutunun kullanımını görmekteyiz.

     Bu iki fonksiyon haricinde de stringlerde kullandığımız bazı fonksiyonlar vardır.

1)strcpy() ve strncpy() fonksiyonları

    strcpy() fonksiyonu ile bir katarı başka bir katara kopyalamak için kullanıyoruz. Burada katar boyutunun bir önemi yoktur.

            Kullanımı
               strcpy(s1,s2) 
               s1= hedef
               s2= kaynak

   strncpy() fonksiyonu is strcpy() fonksiyonu ile aynı görevi görür. Fakat strcpy()’ den farklı olarak, kaç karakter kopyalanacağı belirtir.

2)strcat() ve strncat() fonksiyonları
   Bu fonksiyonlar verilen iki katarı başka katarla birleştirmeye yarar. srtcat() fonksiyonu verilen katarları tamamen birleştirirken, strncat() fonksiyonu belirli bir eleman sayısına kadar birleştirir.
    Kullanımları:
                      strcat(hedef,kaynak);
                      strncat(hedef,kaynak,sayı);

3)strcmp() ve srtncmp() fonksiyonları
  
   strcmp() fonksiyonu verilen iki katarı birbirleri ile karşılaştırmada kullanılır. Karşılaştırma derken alfabetik sıraya göre karşılaştırmadan bahsediyorum. Eğer bu karşılaştırmada iki katar birbirine eşit ise geriye 0, ilk katar büyük ise geriye pozitif, tam tersi bir durum ise geriye negatif değer döndürür.

    Kullanımı:
                      sonuç=strncmp(s1,s2)
                      sonuç,
                                -1 ise s2>s1
 0 ise s2=s1
 1 ise s1>s2 ‘ dir.
   strncmp() fonksiyonu ise diğer fonksiyonumuz gibi iki katarı karşılaştırır. Fakat bu fonksiyonda devreye uzunluk girer yani bu fonksiyon verilen iki katarın istenilen sayıda karakterini birbiriyle karşılaştırır.

    Kullanımı:
                      sonuç=strncmp(s1,s2)
                      sonuç,
                                -1 ise s2>s1
 0 ise s2=s1
 1 ise s1>s2 ‘ dir.
4)strlen() fonksiyonu

   Bu fonksiyon bir stringin kaç karakterden oluştuğunu hesaplar. Sonuç olarak ise bir sayısal değer döndürür.

5)strstr() fonksiyonu

   Bu fonksiyonu bir katar içinde başka bir katarı aramak için kullanıyoruz. Bu fonksiyon aranılan katarı bulduğu zaman bulduğu yerden sonraki katarı bir pointer değişkene yerleştirir. Eğer bir eşleme olmazsa geriye herhangi bir sonuç dönmez ve pointer null olarak kalır.
    Kullanımı:
                      Pointer değişken=strstr(str1,str2)
                                Str1=içinde arama yapılacak string(katar)
Str2=aranacak string(katar)
NOT: Pointerlardan daha önce bahsetmediğim için pointerı açıklayayım ilk önce pointer; hafızada başka bir adrese ait değeri tutan, başka bir adresi gösteren değişkene denir.

6)strchr() ve strrchr() fonksiyonları

   Bu fonksiyonlar strstr() fonksiyonu gibi arama yaparken kullanılır. Ama katar içinde katar aramak için değil, katar içinde tek bir karakteri aramak için kullanılır. strchr() karakterin katar içindeki ilk konumunu verirken, strrchr() karakterin son kez geçtiği adresi verir.

7)atoi() ve atof() fonksiyonları

   Verilen bir katarı sayıya dönüştürmek için kullandığımız fonksiyonlardır. Eğer katarı bir tamsayıya (int) çevirmek istiyorsak atoi() fonksiyonunu, virgüllü bir sayıya (float) çevirmek istiyorsak atof() fonksiyonunu kullanıyoruz. Bu fonksiyonlar c kütüphanesinde <stdlib.h> kitaplığında bulunmaktadır. Bu fonksiyonları kullanırken başlangıçta bu kitaplığı bildirmemiz gerekir.

8)strlwr() ve strupr() fonksiyonları

   strlwr() fonksiyonunu bir dizindeki büyük harfleri küçük harflere çevirmek için kullanıyoruz.

   strupr() fonksiyonunu ise bir dizindeki küçük harfleri büyük harfe çevirmekte kullanıyoruz.

9)isalnum() fonksiyonu

          isalnum(karakter);
   Eğer karakter bir harf yada bir sayı ise fonksiyon değeri sıfırdan farklı; değilse sıfır olur.

10)isalpha() ve isdigit() fonksiyonları

          int isalpha(karakter);
   Eğer karakter bir harf ise fonksiyon sıfırdan farklı bir değer verir; değilse sıfır değeri verir.
          int isdigit(karakter);
   Eğer karakter bir sayı ise fonksiyon sıfırdan farklı bir değer verir; değilse sıfır değeri verir.


                  

Operatörlerin Aşırı Yüklenmesi (Overloading)

    Operatörlere bilinen özellikleri dışında başka özellikler kazandırmak mümkündür. C++ da bu işleme operatörlerin aşırı yüklenmesi adı v...