strcat() Kullanımı
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 17 / 63.
strcpy() ile dizeleri kopyalamayı öğrendiniz, peki ya iki dizeyi birbirine eklemek isterseniz? Buna birleştirme (concatenation) denir ve C, bu amaç için <string.h> kütüphanesinden strcat() fonksiyonunu sağlar.
strcat() fonksiyonu, bir dizginin içeriğini başka bir dizginin sonuna ekler. İki argüman alır: hedef dizgi (değiştirilecek olan) ve kaynak dizgi (sona eklenecek olan).
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting artık "Hello World" içeriyorHedef dizginizin hem orijinal içeriği hem de eklenen yeni içeriği barındıracak kadar yeterli alana sahip olması çok önemlidir. strcat() fonksiyonu, hedef dizgideki boş sonlandırıcıyı bulur, onu kaldırır, kaynak dizgiyi o konuma kopyalar ve en sona yeni bir boş sonlandırıcı ekler.
Bu fonksiyon, tekil kelimelerden tam cümleler oluşturmak veya kullanıcı girişini önceden tanımlanmış metinle birleştirmek gibi, daha küçük parçalardan daha uzun dizeler oluşturmak için gereklidir.
Bazen bir sayıyı birleştirmeden (concatenate) önce bir dizeye (string) dönüştürmeniz gerekir. Bunun için, (çoğu C programında zaten dahil edilmiş olan) <stdio.h> kütüphanesindeki sprintf() fonksiyonunu kullanabilirsiniz. sprintf() tıpkı printf() gibi çalışır, ancak sonucu ekrana yazdırmak yerine biçimlendirilmiş sonucu bir karakter dizisine (char array) yazar.
Örneğin, bir tam sayıyı bir dizeye dönüştürmek için:
int age = 25;
char ageStr[10];
sprintf(ageStr, "%d", age); // ageStr artık "25" içeriyor
char result[30] = "Age: ";
strcat(result, ageStr); // result artık "Age: 25" içeriyorsprintf() fonksiyonunun ilk argümanı hedef karakter dizisidir, ikincisi biçim dizesidir (printf() ile aynı biçim belirleyicilerini kullanır) ve geri kalan argümanlar eklenecek değerlerdir.Görev
KolayKişiselleştirilmiş mesajlar oluşturmak için strcat() fonksiyonunu kullanarak dize birleştirmeyi gösteren bir C programı yazın. Programınız şunları yapmalıdır:
- İşlenecek kişi sayısını temsil eden bir
ntam sayısını okuyun - Her kişi için:
- Girdiden adlarını okuyun
- Girdiden soyadlarını okuyun
- 100 elemanlı
fullNameadında bir karakter dizisi oluşturun - Adı
fullNameiçine kopyalamak içinstrcpy()kullanın fullNamesonuna tek bir boşluk " " eklemek içinstrcat()kullanın- Soyadı
fullNamesonuna eklemek içinstrcat()kullanın - 150 elemanlı
greetingadında bir karakter dizisi oluşturun - "Hello, " ifadesini
greetingiçine kopyalamak içinstrcpy()kullanın fullNamedeğerinigreetingsonuna eklemek içinstrcat()kullanın- "! Welcome to our program." ifadesini
greetingsonuna eklemek içinstrcat()kullanın - Nihai karşılama mesajını yazdırın
- Tüm kişiler işlendikten sonra bir özet mesajı oluşturun:
- 100 elemanlı
summaryadında bir karakter dizisi oluşturun - "Total people processed: " ifadesini
summaryiçine kopyalamak içinstrcpy()kullanın nsayısını bir dizeye dönüştürün vesummarysonuna eklemek içinstrcat()kullanın- Özet mesajını yazdırın
- 100 elemanlı
Dize fonksiyonlarını kullanmak için <string.h> başlık dosyasını dahil etmeyi unutmayın.
Çıktınız sonuçları aşağıdaki formatta görüntülemelidir:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]Örneğin, girdi şu şekildeyse:
2
John
Doe
Alice
SmithÇıktınız şu şekilde olmalıdır:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2Bu zorluk, birden fazla dizeyi birbirine eklemek için strcat() kullanımını, başlangıç dize kurulumu için strcpy() ile birleştirmeyi ve birden fazla bileşenden adım adım karmaşık dizeler oluşturma anlayışınızı test eder.
Kopya kağıdı
<string.h> kütüphanesindeki strcat() işlevi, kaynak dizeyi hedef dizenin sonuna ekleyerek iki dizeyi birleştirir.
Sözdizimi: strcat(destination, source)
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting artık "Hello World" içeriyorÖnemli: Hedef dize, hem orijinal içeriği hem de eklenen içeriği tutacak kadar yeterli alana sahip olmalıdır. İşlev, hedefteki null sonlandırıcıyı bulur, onu kaldırır, kaynak dizeyi o konuma kopyalar ve sona yeni bir null sonlandırıcı ekler.
<stdio.h> kütüphanesindeki sprintf() işlevi printf() gibi çalışır, ancak biçimlendirilmiş sonucu yazdırmak yerine bir karakter dizisine (string) yazar. Bu, tam sayıları (veya diğer değerleri) dizelere dönüştürmek için kullanışlıdır.
Sözdizimi: sprintf(destination, format, value)
#include <stdio.h>
int num = 42;
char numStr[10];
sprintf(numStr, "%d", num); // numStr artık "42" içeriyorÖnemli: Hedef dizi, null sonlandırıcı da dahil olmak üzere sonuç dizesini tutacak kadar büyük olmalıdır.
Kendin dene
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// Kişi sayısını oku
int n;
scanf("%d", &n);
// YAPILACAK: Kodunuzu aşağıya yazın
// Her bir kişiyi işle ve selamlama mesajları oluştur
// Ardından özet mesajını oluştur ve görüntüle
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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ı