Program, bg_replace_substr() fonksiyonunun str parametresine geçirilen karakter dizisi içinde yer alan ve find parametresi ile gösterilen karakter dizisini/dizilerini replace parametresi ile gösterilen karakter dizisi ile değiştirir.
Replace parametresindeki karakter dizisi find parametresindeki karakter dizisinden uzun olduğu zaman, karakter dizisinde meydana gelecek boyut artışı fonksiyon içinde realloc() fonksiyonu ile yeniden bellek tahsisi yapılarak dengelenmektedir.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *bg_replace_substr(const char *str, const char *find, const char *replace);
int main(void)
{
char *pdizi = malloc(100);
char *rdizi;
strcpy(pdizi, "Bilgisayarda program geliştirme ve program örnekleri");
printf("%s\n", pdizi);
rdizi= bg_replace_substr(pdizi, "program", "yazılım");
printf("%s\n", rdizi);
free(pdizi);
free(rdizi);
return 0;
}
char *bg_replace_substr(const char *str, const char *find, const char *replace)
{
unsigned find_len, replace_len;
char *newstr;
unsigned int newstr_size; // Yeni oluşturulan karakter dizisinin boyutu
unsigned int newstr_act = 0; // Yeni oluşturulan karakter dizisinin aktif konumu
char *pfind; // Değiştirilecek olan karakter dizisinin adresi
find_len = strlen(find); // Değiştirilecek olan karakter dizisinin boyutu
// Ana karakter dizisi veya değiştirilecek karakter dizisi boş ise
if (!strlen(str) || !find_len) return NULL;
replace_len = strlen(replace);
newstr_size = strlen(str) + 1;
newstr = malloc(newstr_size);
while ((pfind = strstr(str, find))) {
// Bulunan karakter dizisine kadar olan karakterleri newstr belleğine kopyalama
memcpy(newstr + newstr_act, str, pfind - str);
// Bulunan karakter dizisinin başlangıç adresinin
// orjinal str işaretçisi ile olan farkını newstr_act değerine ekleme
newstr_act += pfind - str;
// Orjinal karakter dizisi adresini, bulunan karakter dizisinin adresinden
// find uzunluğu kadar ileri alma
str = pfind + find_len;
// Yeni oluşturulan karakter dizisine eklenecek veya çıkarılacak olan karakter
// sayısına göre newstr_size boyutunu hesaplama
newstr_size = newstr_size - find_len + replace_len;
// Yeni oluşturulan karakter dizisinin bellek ayırma işlemini yenileme
newstr = realloc(newstr, newstr_size);
// replace karakter dizisini newstr dizisine ekleme
memcpy(newstr + newstr_act, replace, replace_len);
// newstr_act değerini replace uzunluğu kadar artırma
newstr_act += replace_len;
}
// Kalan değerleri newstr belleğine kopyalama
memcpy(newstr + newstr_act, str, strlen(str));
newstr_act += strlen(str);
*(newstr+newstr_act) = '\0';
return newstr;
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:
Bilgisayarda program geliştirme ve program örnekleri Bilgisayarda yazılım geliştirme ve yazılım örnekleri