Menu
Coddy logo textTech

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; bu işlev:
    • 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 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ılmış belleğe kopyalamak için strcpy() kullanır
    • İkinci dizeyi sonuca eklemek 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; bu işlev:
    • Üç char* parametresi alır: word1, word2 ve separator
    • Dinamik olarak ayrılmış bir dizeyi gösteren bir char* döndürür
    • Şu biçimde birleştirilmiş bir dize oluşturur: word1 + separator + word2
    • İlk olarak word1 ile separator değerlerini birleştirmek için concatenateStrings işlevini çağırır
    • Daha sonra sonuca word2 değerini eklemek için concatenateStrings işlevini tekrar çağırır
    • Aradaki tüm 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 boyutunda üç karakter dizisi tanımlayın: firstWord, secondWord ve connector
    • İlk kelimeyi, ikinci kelimeyi ve bağlayıcıyı temsil eden üç dizeyi girdiden 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ç dizesinin uzunluğunu hesaplayıp şu tam biçimde yazdırın: Length: [length]
    • Dinamik olarak ayrılmış belleği serbest bırakın

Bu alıştırma, dinamik bellek ayırma, dize işleme işlevleri, işaretçi dönüş değerleri ve uygun bellek yönetimi konusundaki yetkinliğinizi sınar. Bellek gereksinimlerini hesaplamayı, malloc() ve free() kullanmayı, birden fazla dize işleviyle çalışmayı ve bellek ayırma hatalarını ele almayı uygulayacaksınız. Bu alıştırma, 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 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;
}

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

Kendi başına pratik yap: Online C derleyicisi