Menu
Coddy logo textTech

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, ancak iki dizeyi birbirine eklemek isterseniz ne olur? 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çeriyor

Hedef dizginizin hem orijinal içeriği hem de eklenen yeni içeriği tutacak kadar yeterli alana sahip olması çok önemlidir. strcat() fonksiyonu, hedef dizgideki boş sonlandırıcıyı (null terminator) bulur, onu kaldırır, kaynak dizgiyi o konuma kopyalar ve en sona yeni bir boş sonlandırıcı ekler.

Bazen bir sayıyı (bir int gibi) bir dizeye eklemeniz gerekir. strcat() yalnızca karakter dizileriyle çalıştığı için, önce sayıyı bir dizeye dönüştürmeniz gerekir. Bunu, tıpkı printf() gibi çalışan ancak biçimlendirilmiş sonucu ekrana yazdırmak yerine bir karakter dizisine yazan sprintf() ile yapabilirsiniz. sprintf(), çoğu C programında zaten dahil edilmiş olan <stdio.h> kütüphanesinin bir parçasıdır.

int n = 42;
char numStr[20];
sprintf(numStr, "%d", n);  // numStr artık dize olarak "42" içeriyor

Sayı numStr içinde bir dize olarak saklandıktan sonra, onu her zamanki gibi başka bir dizenin sonuna eklemek için strcat() kullanabilirsiniz:

char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr);  // summary artık "Total people processed: 3" içerir

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.

challenge icon

Görev

Kolay

Kiş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:

  1. İşlenecek kişi sayısını temsil eden bir n tam sayısını okuyun
  2. Her kişi için:
    • Girdiden ilk adlarını okuyun
    • Girdiden soyadlarını okuyun
    • 100 elemanlı fullName adında bir karakter dizisi oluşturun
    • İlk adı fullName içine kopyalamak için strcpy() kullanın
    • fullName sonuna tek bir boşluk " " eklemek için strcat() kullanın
    • Soyadını fullName sonuna eklemek için strcat() kullanın
    • 150 elemanlı greeting adında bir karakter dizisi oluşturun
    • "Hello, " ifadesini greeting içine kopyalamak için strcpy() kullanın
    • fullName değerini greeting sonuna eklemek için strcat() kullanın
    • "! Welcome to our program." ifadesini greeting sonuna eklemek için strcat() kullanın
    • Nihai karşılama mesajını yazdırın
  3. Tüm kişiler işlendikten sonra bir özet mesajı oluşturun:
    • 100 elemanlı summary adında bir karakter dizisi oluşturun
    • "Total people processed: " ifadesini summary içine kopyalamak için strcpy() kullanın
    • n sayısını bir dizeye dönüştürün ve summary sonuna eklemek için strcat() kullanın
    • Özet mesajını yazdırın

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: 2

Bu zorluk, birden fazla dizeyi birbirine bağlamak için strcat() kullanımını, bunu 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.

Kendin dene

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    // Kişi sayısını oku
    int n;
    scanf("%d", &n);
    
    // TODO: Kodunuzu aşağıya yazın
    // Her bir kişiyi işle ve selamlama mesajlarını oluştur
    // Ardından özet mesajını oluştur ve görüntüle
    
    return 0;
}
quiz iconKendini test et

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