Menu
Coddy logo textTech

Tekrar: Dinamik String Birleştirme

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 61 / 63.

challenge icon

Görev

Kolay

Bir metin işleme aracı oluşturmak için dinamik dize birleştirme işlevi uygulayan bir C programı oluşturun. Programınız şunları yapmalıdır:

  1. Aşağıdaki özelliklere sahip concatenateStrings adında bir işlev yazın:
    • str1 ve str2 adında iki char* parametresi alır
    • Dinamik olarak ayrılmış bir dizeye işaret eden bir char* döndürür
    • Her iki dize artı null sonlandırıcı için gereken toplam belleği hesaplar
    • Gereken tam bellek miktarını ayırmak için malloc() kullanır
    • Bellek ayırmanın başarılı olup olmadığını kontrol eder (ayırma başarısız olursa NULL döndürür)
    • İlk dizeyi ayrılan belleğe kopyalamak için strcpy() kullanır
    • İkinci dizeyi sonuca eklemek için strcat() kullanır
    • Yeni oluşturulan birleştirilmiş dizeye olan işaretçiyi döndürür
  2. Aşağıdaki özelliklere sahip processText adında bir işlev yazın:
    • Üç char* parametresi alır: word1, word2 ve separator
    • Dinamik olarak ayrılmış bir dizeye işaret eden bir char* döndürür
    • Şu formatta birleştirilmiş bir dize oluşturur: word1 + separator + word2
    • Önce word1 ve separator dizelerini birleştirmek için concatenateStrings işlevini çağırır
    • Ardından word2 dizesini sonuca eklemek için tekrar concatenateStrings işlevini çağırır
    • Tüm ara bellek ayırmalarını uygun şekilde serbest bırakır (free)
    • Nihai birleştirilmiş sonucu döndürür
  3. Ana işlev (main function) içinde:
    • Her biri 50 boyutunda üç karakter dizisi tanımlayın: firstWord, secondWord ve connector
    • Girdiden ilk kelimeyi, ikinci kelimeyi ve bağlayıcıyı temsil eden üç dize okuyun
    • Bu üç dize ile processText işlevini çağırın
    • Dönen işaretçinin NULL olmadığını kontrol edin
    • Başarılı olursa, sonucu tam olarak şu formatta yazdırın: Result: [concatenated_string]
    • Bellek ayırma başarısız olursa şunu yazdırın: Memory allocation failed
    • Sonuç dizesinin uzunluğunu hesaplayın ve tam olarak şu formatta yazdırın: Length: [length]
    • Dinamik olarak ayrılmış belleği serbest bırakın (free)

Bu zorluk; dinamik bellek ayırma, dize işleme işlevleri, işaretçi dönüş değerleri ve uygun bellek yönetimi konusundaki uzmanlığınızı test eder. Bellek gereksinimlerini hesaplama, malloc() ve free() kullanma, birden fazla dize işleviyle çalışma ve bellek ayırma hatalarını yönetme konularında pratik yapacaksınız. Bu zorluk, dinamik ayırmanın işlevlerin kendi kapsamlarının ötesinde kalıcı veriler oluşturmasına ve döndürmesine nasıl olanak tanıdığını gösterir.

Kendin dene

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

// TODO: concatenateStrings fonksiyonunuzu buraya yazın

// TODO: processText fonksiyonunuzu buraya yazın

int main() {
    // Girdiyi oku
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: Kodunuzu aşağıya yazın
    // processText fonksiyonunu çağırın ve sonucu işleyin
    
    return 0;
}

Logic & Flow bölümündeki tüm dersler