Tekrar: Dinamik String Birleştirme
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 61 / 63.
Görev
KolayBir 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:
- Aşağıdaki özelliklere sahip
concatenateStringsadında bir işlev yazın:str1vestr2adında ikichar*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
- Aşağıdaki özelliklere sahip
processTextadında bir işlev yazın:- Üç
char*parametresi alır:word1,word2veseparator - 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
word1veseparatordizelerini birleştirmek içinconcatenateStringsişlevini çağırır - Ardından
word2dizesini sonuca eklemek için tekrarconcatenateStringsiş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
- Üç
- Ana işlev (main function) içinde:
- Her biri 50 boyutunda üç karakter dizisi tanımlayın:
firstWord,secondWordveconnector - Girdiden ilk kelimeyi, ikinci kelimeyi ve bağlayıcıyı temsil eden üç dize okuyun
- Bu üç dize ile
processTextiş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)
- Her biri 50 boyutunda üç karakter dizisi tanımlayın:
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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları