sayfa başı

21 Şubat 2019 Perşembe

C Çalışma Soruları – 4 (yazı işlemleri)


Necati Ergin Hocamın kendi sayfasında bulunan çalışma sorularını ve cevaplarını burada yanıtlamaya çalıştım. Sorulara buradan ulaşabilirsiniz.

Aşağıda bildirimi verilen remove_str isimli işlevin kodunu yazınız:

 char * remove_str(char *pstr, const char *pdel);
remove_str işlevi birinci parametresine gönderilen adresteki yazının içinden ikinci parametresine adresi geçilen yazıyı (varsa) silecek.
Eğer pstr adresi içindeki yazıda pdel adresindeki yazı birden fazla geçiyorsa silme işlemi yalnızca birinci yazı için gerçekleştirilecek.
Eğer silinecek yazı pstr adresinde yer almıyorsa işlev bir silme işlemi gerçekleştirmeyecek.
İşlevin geri dönüş değeri içinde silme işlemi gerçekleştirilmiş yazının adresi. (pstr adresi)
Tanımladığınız işlev içinde standart C işlevlerine çağrı yapabilirsiniz.
Tanımladığınız işlevi aşağıdaki kodla test edebilirsiniz:
Tanımladığınız işlev içinde standart C işlevlerine çağrı yapabilirsiniz.
Tanımladığınız işlevi aşağıdaki kodla test edebilirsiniz:


#include <stdio.h>
#include <string.h>

char *removeStr(char *ptr, const char *p);

int main()
{
 char s1[] = "bugun pazartesi gunu";
 char s2[] = "ali 2345metin 2345";

 puts(removeStr(s1, "tesi")); // bugun pazar gunu
 puts(removeStr(s2, "2345")); //ali metin 2345
}

Yanıt:

#include <stdio.h>
#include <string.h>

char *removeStr(char *ptr, const char *p)
{
 size_t len1 = strlen(ptr);
 size_t len2 = strlen(p);
 char *ps;
 
 if (len1 > len2 && (ps = strstr(ptr, p))) 
 {
  memmove(ps, ps + len2, len1 - (ps - ptr) - len2 + 1);
 }
 
 return ptr;
}

int main()
{
 char s1[] = "bugun pazartesi gunu";
 char s2[] = "ali 2345metin 2345";

 puts(removeStr(s1, "tesi")); // bugun pazar gunu
 puts(removeStr(s2, "2345")); //ali metin 2345
}

Hiç yorum yok:

Yorum Gönder

Son Ütücü