Tekrar: Dinamik String Birleştirme
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 61 / 63.
Görev
KolayBir 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:
concatenateStringsadlı bir işlev yazın:str1vestr2adlı ikichar*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
processTextadlı bir işlev yazın:- Üç
char*parametresi alır:word1,word2veseparator - 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
word1ileseparator'ı birleştirmek içinconcatenateStringsişlevini çağırır - Ardından
word2'yi sonuca eklemek içinconcatenateStringsişlevini tekrar çağırır - Ara bellek ayırmalarını uygun şekilde serbest bırakır
- Son birleştirilmiş sonucu döndürür
- Üç
- main işlevinde:
- Her biri 50 elemanlı üç karakter dizisi tanımlayın:
firstWord,secondWordveconnector - Girdiden sırasıyla ilk kelimeyi, ikinci kelimeyi ve bağlayıcıyı temsil eden üç dize okuyun
- Bu üç dizeyle
processTextiş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
- Her biri 50 elemanlı üç karakter dizisi tanımlayı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
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ıKendi başına pratik yap: Online C derleyicisi