Menu
CoddyTech

Tekrar: Dinamik String Birleştirme

Coddy'nin C Journey'sinin Mantık & Akış 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 bir dize birleştirme işlevi uygulayan bir C programı yazın. Programınız şunları yapmalıdır:

  1. concatenateStrings adlı bir işlev yazın:
    • str1 ve str2 adlı iki char* parametresi alır
    • Dinamik olarak ayrılmış bir dizeyi gösteren bir char* döndürür
    • Her iki dize ve null sonlandırıcı için gereken toplam bellek miktarını 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
    • Sonucu ikinci dizeyle birleştirmek için strcat() kullanır
    • Yeni oluşturulan birleştirilmiş dizenin işaretçisini döndürür
  2. processText adlı bir işlev yazın:
    • Üç char* parametresi alır: word1, word2 ve separator
    • Dinamik olarak ayrılmış bir dizeyi gösteren bir char* döndürür
    • word1 + separator + word2 biçiminde birleştirilmiş bir dize oluşturur
    • Önce word1 ile separator'ı birleştirmek için concatenateStrings işlevini çağırır
    • Ardından word2'yi sonuca eklemek için concatenateStrings işlevini tekrar çağırır
    • Ara bellek ayırmalarını uygun şekilde serbest bırakır
    • Son birleştirilmiş sonucu döndürür
  3. main işlevinde:
    • Her biri 50 elemanlı üç karakter dizisi tanımlayın: firstWord, secondWord ve connector
    • Girdiden sırasıyla ilk kelimeyi, ikinci kelimeyi ve bağlayıcıyı temsil eden üç dize okuyun
    • Bu üç dizeyle processText işlevini çağırın
    • Döndürülen işaretçinin NULL olmadığını kontrol edin
    • Başarılı olursa sonucu şu tam biçimde yazdırın: Result: [concatenated_string]
    • Bellek ayırma başarısız olursa şunu yazdırın: Memory allocation failed
    • Sonuç dizgesinin uzunluğunu hesaplayıp şu tam biçimde yazdırın: Length: [length]
    • Dinamik olarak ayrılan belleği serbest bırakın

Bu meydan okuma, dinamik bellek ayırma, dize işleme işlevleri, işaretçi dönüş değerleri ve doğru bellek yönetimi konularındaki bilginizi sınar. Bellek gereksinimlerini hesaplama, malloc() ve free() kullanma, birden fazla dize işleviyle çalışma ve bellek ayırma hatalarını ele alma pratiği yapacaksınız. Bu meydan okuma, dinamik ayırmanın işlevlerin kendi kapsamlarının ötesinde varlığını sürdüren veriler oluşturup döndürmesine nasıl olanak tanıdığını gösterir.

Kendin dene

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

// TODO: concatenateStrings fonksiyonunu buraya yazın

// TODO: processText fonksiyonunu buraya yazın

int main() {
    // Girdiyi okuyun
    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;
}

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi