Dize arama
- C kursu
- Orta seviye
- Ders 20/116
- 5 dk
strstr ve strchr ile gelişmiş arama öğrenirsin.
strstr ile alt dize arama
strstr(haystack, needle), haystack içinde needle alt dizesini arar. Bulursa ilk eşleşmenin adresini, bulamazsa NULL döndürür.
Örnek: char *r = strstr("Merhaba dünya", "dün");. Burada r, "dünya" kısmının başlangıç adresini tutar. printf("%s\n", r); çıktısı "dünya" olur. strstr büyük/küçük duyarlıdır; "Dün" ile "dün" farklıdır. Arama sonucunu kullanmadan önce NULL kontrolü yapmak iyi bir alışkanlıktır.
strchr ile karakter arama
strchr(s, c), s dizesinde c karakterini arar. Bulursa ilk eşleşmenin adresini, bulamazsa NULL döndürür.
Örnek: char *p = strchr("Merhaba", 'a');. Burada p, ilk 'a' karakterinin adresini tutar. strstr alt dize ararken, strchr tek karakter arar. İkisi de bulamazsa NULL döner; bu yüzden sonuç kullanılmadan önce kontrol edilmelidir. Karakter arama, ayrıştırma ve biçim işlemlerinde sık kullanılır.
Uygulama Alt dizeyi bul ve yazdır
char *r = strstr("Merhaba dünya", "dün"); ile alt dizeyi ara. printf("%s\n", r); ile bulunan kısmı yazdır. <string.h> başlık dosyasını ekle.
Başlangıç kodu
#include <stdio.h>
#include <string.h>
// strstr ile "dün" alt dizesini ara
// printf ile bulunan kısmı yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <string.h>
int main(void) {
char *r = strstr("Merhaba dünya", "dün");
printf("%s\n", r);
return 0;
}Beklenen çıktı
dünya
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 strstr çağrısını tamamla
char *r = ____("Merhaba dünya", "dün");
char *r = strstr("Merhaba dünya", "dün");
Açıklama: Alt dize arama fonksiyonu strstr'dir.
2 Arama fonksiyonlarını eşle
| Kavram | Anlamı |
|---|---|
strstr |
Alt dize arar |
strchr |
Karakter arar |
NULL dönüş |
Bulunamadı |
adres dönüş |
Bulundu |
3 strstr bulamazsa ne döndürür?
- Boş dize
- NULL Doğru cevap
- -1
- 0 indeksi
Açıklama: strstr bulamazsa NULL döner; bu yüzden sonuç kullanılmadan önce kontrol edilmeli.