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; bu işlev: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 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
processTextadlı bir işlev yazın; bu işlev:- Üç
char*parametresi alır:word1,word2veseparator - 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
word1ileseparatordeğerlerini birleştirmek içinconcatenateStringsişlevini çağırır - Daha sonra sonuca
word2değerini eklemek içinconcatenateStringsiş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
- Üç
- main işlevinde:
- Her biri 50 boyutunda üç karakter dizisi tanımlayın:
firstWord,secondWordveconnector - İlk kelimeyi, ikinci kelimeyi ve bağlayıcıyı temsil eden üç dizeyi girdiden 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ç dizesinin uzunluğunu hesaplayıp şu tam biçimde yazdırın:
Length: [length] - Dinamik olarak ayrılmış belleği serbest bırakın
- Her biri 50 boyutunda üç karakter dizisi tanımlayı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
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