Arama İşlevleri
Önceki V. Oylum - Diziler ve Dizgeler Sonraki
Arama İşlevleri
İçindekiler
1. Uyumluluk için Varolan Dizge Arama İşlevleri
Bu kısımda dizgeler ve diziler üzerinde çeşitli aramalar yapan kütüphane işlevleri açıklanmıştır. Bu işlevler string.h başlık dosyasında bildirilmiştir.
void *memchr
(const void *blok,
 int         c,
 size_t      boyut)
işlev
Bu işlev blok adresinden başlayan nesnenin ilk boyut baytı içindeki ilk c (bir unsigned char'a dönüştürülmüş) baytını bulur. Dönen değer baytın konumunu içeren bir göstericidir. c baytı bulunamazsa bir boş gösterici döner.
wchar_t *wmemchr
(const wchar_t *blok,
 wchar_t        wc,
 size_t         boyut)
işlev
Bu işlev blok adresinden başlayan nesnenin ilk boyut geniş karakteri içindeki ilk wc geniş karakterini bulur. Dönen değer geniş karakterin konumunu içeren bir göstericidir. wc baytı bulunamazsa bir boş gösterici döner.
void *rawmemchr
(const void *blok,
 int         c)
işlev
memchr işlevi çoğunlukla, parametrelerle belirtilen bellek bloğunda bir c baytının bulunduğu bilinerek kullanılır. Ancak bu, boyut parametresinin gerçekte gerekmediği anlamına gelir ve bu işlevle uygulanan testler çalışma anında yapıldığından (blok sonunun aşılıp aşılmadığına bakılması gibi) gerekli değildir.
rawmemchr işlevi şaşırtıcı sıklıkla karşılaşılan bu durum için vardır. Arayüzü, boyut parametresinin bulunmayışı dışında memchr işlevine benzer. Yazılımcı, c karakterinin blok içinde mevcut olduğu kabulünde bir hataya düşerse, işlev bloğun sonunu aşacaktır. Bu durum için sonuç belirsizdir. Aksi takdirde bayt konumuna bir gösterici döner.
Bu işlev özellikle bir dizgenin sonuna bakılmak istendiğinde kullanılır. Tüm dizgeler bir boş karakterle sonlandırılmış olduğundan,
rawmemchr (str, '\0')
gibi bir çağrı dizgenin sonunu asla aşmayacaktır.
Bu işlev bir GNU oluşumudur.
void *memrchr
(const void *blok,
 int         c,
 size_t      boyut)
işlev
Bu işlev, blok ve boyut ile belirtilen bloğu sondan başa doğru araması dışında, aramayı baştan sona doğru yapan memrchr gibidir.
Bu işlev bir GNU oluşumudur.
char *strchr
(const char *dizge,
 int         c)
işlev
strchr işlevi, boş karakter sonlandırmalı dizge dizgesi içinde c karakterini (char türüne çevirerek) bulursa ilk bulduğu karakter için bir gösterici ile döner, bulamazsa boş gösterici ile döner.
Örnek:
strchr ("hello, world", 'l')
    => "llo, world"
strchr ("hello, world", '?')
    => NULL
Sonlandırıcı boş karakter dizgenin bir parçası olarak ele alındığından, c argümanı olarak boş karakter vererek dizgenin sonuna bir gösterici alabilirsiniz. Böyle durumlarda strchrnul kullanmak daha iyi olur (ama daha az taşınabilirdir).
wchar_t *wcschr
(const wchar_t *dizge-geniş,
 int            wc)
işlev
wcschr işlevi, dizge-geniş dizgesi içinde wc geniş karakterini bulursa ilk bulduğu karakter için bir gösterici ile döner, bulamazsa boş gösterici ile döner.
Sonlandırıcı boş karakter dizgenin bir parçası olarak ele alındığından, wc argümanı olarak boş karakter vererek dizgenin sonuna bir gösterici alabilirsiniz. Böyle durumlarda wcschrnul kullanmak daha iyi olur (ama daha az taşınabilirdir).
char *strchrnul
(const char *dizge,
 int         c)
işlev
strchrnul işlevi, karakteri bulamadığı takdirde dizgeyi sonlandıran boş karaktere bir gösterici döndürmesi dışında strchr ile aynıdır.
Bu işlev bir GNU oluşumudur.
wchar_t *wcschrnul
(const wchar_t *dizge-geniş,
 wchar_t        wc)
işlev
wcschrnul işlevi, geniş karakteri bulamadığı takdirde dizgeyi sonlandıran boş karaktere bir gösterici döndürmesi dışında wcschr ile aynıdır.
Bu işlev bir GNU oluşumudur.
strchr işlevinin kullanışlı ama anlamsız bir kullanımı da dizgeyi sonlandıran boş karaktere bir gösterici istenmesi durumudur. Bunu yapmanın kolay bir yolu vardır:
s += strlen (s);
Bu oldukça iyi bir çözüm gibi görünürse de toplama işlemi, strlen ile zaten yapılan işlemin tekrarlanmasını sağlar. Daha iyi bir çözüm şöyle olurdu:
s = strchr (s, '\0');
strchr işlevinin ikinci parametresi için bir sınırlama olmadığından burada bir boş karakter belirtilebilir. Şimdi düşüneceksiniz; strchr çıkışta iki kritere baktığından strlen işlevine göre daha çok işlem yapacak. Bu doğru. Ama GNU C kütüphanesinde strchr işlevi özel olarak daha hızlı olması için eniyilenerek gerçekleştirilmiştir.
char *strrchr
(const char *dizge,
 int         c)
işlev
strrchr işlevi, dizge dizgesini sondan başa doğru araması dışında strchr işlevine benzer.
Örnek:
strrchr ("hello, world", 'l')
    => "ld"
wchar_t *wcsrchr
(const wchar_t *dizge-geniş,
 wchar_t        c)
işlev
wcsrchr işlevi, dizge-geniş dizgesini sondan başa doğru araması dışında wcschr işlevi gibidir.
char *strstr
(const char *dizge,
 const char *altdizge)
işlev
Bu işlev, dizge içinde bir karakter yerine altdizge dizgesini araması dışında strchr gibidir. dizge dizgesi içinde altdizge dizgesinin, bulduğunda ilk karakterine bir gösterici ile döner, bulamazsa boş gösterici ile döner. altdizge bir boş dizge olarak verilirse işlev dizge ile döner.
Örnek:
strstr ("hello, world", "l")
    => "llo, world"
strstr ("hello, world", "wo")
    => "world"
wchar_t *wcsstr
(const wchar_t *dizge,
 const wchar_t *altdizge)
işlev
Bu işlev, dizge içinde bir geniş karakter yerine altdizge dizgesini araması dışında wcschr gibidir. dizge dizgesi içinde altdizge dizgesinin, bulduğunda ilk geniş karakterine bir gösterici ile döner, bulamazsa boş gösterici ile döner. altdizge bir boş dizge olarak verilirse işlev dizge ile döner.
wchar_t *wcswcs
(const wchar_t *dizge,
 const wchar_t *altdizge)
işlev
wcswcs işlevi, wcsstr işlevinin eski ve artık kullanılmayan bir benzeridir. İşlevin ismi ilk olarak, ISO C90 1. düzeltmesinden önce X/Open Taşınabilirlik Kılavuzunda kullanılmıştı.
char *strcasestr
(const char *dizge,
 const char *altdizge)
işlev
Arama yaparken harf büyüklüğünü gözardı etmesi dışında strstr işlevi gibidir. strcasecmp işlevindeki gibi büyük ve küçük harflerin birbirleriyle ilişkileri yerele bağlıdır.
Örnek:
strcasestr ("hello, world", "L")
    => "llo, world"
strcasestr ("hello, World", "wo")
    => "World"
void *memmem
(const void *dizge,
 size_t      dizge-uzunluğu,
 const void *altdizge,
 size_t      altdizge-uzunluğu)
işlev
Bu işlev strstr işlevi gibidir, ama altdizge ve dizge birer boş karakter sonlandırmalı dizge değil birer bayt dizisidir, dizge-uzunluğu ve altdizge-uzunluğu da bunların uzunluklarıdır.
Bu işlev bir GNU oluşumudur.
size_t strspn
(const char *dizge,
 const char *arananlar)
işlev
strspn ("string span" kısaltması) işlevi, dizge içinde arananlar dizgesi ile belirtilen karakterlerden birinin bulunması durumunda, bulunan karakterin arananlar içinde, bulunduğu ilk altdizgenin uzunluğu ile döner. arananlar dizgesindeki karakterlerin sırasının önemi yoktur.
Örnek:
strspn ("hello, world", "abcdefghijklmnopqrstuvwxyz")
    => 5
Burada karakter bayt anlamındadır. Çok baytlı karakter kodlaması kullanılan dizgelerde bir karakter birden fazla bayttan oluştuğundan bu işlevde her bayt ayrı ayrı değerlendirilir. Bu işlev yerele bağımlı değildir.
size_t wcsspn
(const wchar_t *dizge-geniş,
 const wchar_t *arananlar)
işlev
wcsspn ("wide character string span" kısaltması) işlevi, dizge-geniş içinde arananlar dizgesi ile belirtilen geniş karakterlerden birinin bulunması durumunda, bulunan geniş karakterin arananlar içinde, bulunduğu ilk altdizgenin uzunluğu döner. arananlar dizgesindeki geniş karakterlerin sırasının önemi yoktur.
size_t strcspn
(const char *dizge,
 const char *arananlar)
işlev
strcspn ("string complement span" kısaltması) işlevi, dizge içinde arananlar dizgesi ile belirtilen karakterlerden birinin bulunması durumunda, dizge içinde, bulunan karakteri içermeyen ilk alt dizgenin uzunluğu ile döner.
Örnek:
strcspn ("hello, world", " \t\n,.;!?")
    => 5
Burada karakter bayt anlamındadır. Çok baytlı karakter kodlaması kullanılan dizgelerde bir karakter birden fazla bayttan oluştuğundan bu işlevde her bayt ayrı ayrı değerlendirilir. Bu işlev yerele bağımlı değildir.
size_t wcscspn
(const wchar_t *dizge-geniş,
 const wchar_t *arananlar)
işlev
wcscspn ("wide character string complement span" kısaltması) işlevi, dizge-geniş içinde arananlar dizgesi ile belirtilen geniş karakterlerden birinin bulunması durumunda, dizge-geniş içinde, bulunan karakteri içermeyen ilk alt dizgenin uzunluğu ile döner.
char *strpbrk
(const char *dizge,
 const char *arananlar)
işlev
strpbrk ("string pointer break" kısaltması) işlevi, strcspn işlevine benzer, farklı olarak, dizge içinde, bulunan karakterle başlayan dizgeye bir gösterici ile döner. arananlar içindeki karakterlerden biri bulunamazsa boş gösterici döner.
Örnek:
strpbrk ("hello, world", " \t\n,.;!?")
    => ", world"
Burada karakter bayt anlamındadır. Çok baytlı karakter kodlaması kullanılan dizgelerde bir karakter birden fazla bayttan oluştuğundan bu işlevde her bayt ayrı ayrı değerlendirilir. Bu işlev yerele bağımlı değildir.
wchar_t *wcspbrk
(const wchar_t *dizge-geniş,
 const wchar_t *arananlar)
işlev
wcspbrk ("wide character string pointer break" kısaltması) işlevi, wcscspn işlevine benzer, farklı olarak, dizge-geniş içinde, bulunan geniş karakterle başlayan dizgeye bir gösterici ile döner. arananlar içindeki geniş karakterlerden biri bulunamazsa boş gösterici döner.
Önceki Üst Ana Başlık Sonraki
Dizgeleri Yerele Özgü Karşılaştırma İşlevleri Başlangıç Uyumluluk için Varolan Dizge Arama İşlevleri
Bir Linux Kitaplığı Sayfası