C String Birleştirme

C String Concatenation



Birleştirme, ikinci dizeyi birinci dizenin sonuna ekleme işlemidir. Bu yazıda, farklı yöntemler kullanarak C'de dizeleri nasıl birleştireceğimizi tartışacağız.

Dizeyi birleştirmek için kullanılan standart C kitaplığı işlevi strcat() işlevidir.







İşlev Prototipi:

$karakter * sokak kedisi (str1,str2);

burada str1 ilk dizedir ve str2 ikinci dizedir. İşlevin dönüş değeri, birleştirilmiş dizenin işaretçisidir.



Şimdi örnek yardımıyla birleştirmenin nasıl yapıldığını göreceğiz.



Örnek 1:

$ sokak kedisi (str1,str2);
str1 nerede Bella
str2 Whitmann'dır

dizenin birleştirilmesinden sonra,ilk dize olacak

str1 Bella Whitmann
str2 Whitmann

string2 aynı kalacaktır.





Örnek2:

$ sokak kedisi (str2,str1);
str1 nerede Bella
str2 Whitmann'dır

dizenin birleştirilmesinden sonra,birleştirilmiş dize olacak

str1 Bella
str2 Bella Whitmann

string1 aynı kalacaktır.

C Başlık Dosyasında Bildirim

Dize işleme işlevleri başlık dosyası altında bildirilir. Birleştirmek için standart işlevi kullanmak istiyorsa, bu başlık dosyasının dahil edilmesi gerekir.



Bu nedenle, dize birleştirmeyi iki şekilde elde edebiliriz. Biri Standart C kitaplığı işlevini kullanmaktır, diğeri ise C kitaplık işlevini kullanmaktır. Aşağıda, her iki yolu da gösteren örnek programlar bulunmaktadır. C kitaplığı işlevini kullanmadan dize birleştirme, birden çok yolla uygulanabilir.

Bunu da ilerleyen bölümlerde örneklerle tartışacağız.

C Kitaplığı İşlevini Kullanarak İki Dizenin Birleştirilmesi

#Dahil etmek

#Dahil etmek

#define BUF_SIZE 256
intana()
{
karakterS1[BUF_SIZE],S2[BUF_SIZE]; /* İki string tampon */

baskı ('İlk dizeyi girin '); ] /* Kullanıcının 1. dizeyi girmesi için konsola mesaj yazdır*/
fget'lar (S1,BUF_SIZE,standart); /* kullanıcı giriş dizesini S1 arabelleğinde sakla */
S1[ strlen (S1)-1] = ' 0';

baskı ('İkinci dizeyi girin ');/* 2. dizeyi girmek için kullanıcıya mesaj yazdır*/
fget'lar (S2,BUF_SIZE,standart); /* kullanıcı giriş dizesini S2 arabelleğinde sakla */
S2[ strlen (S2)-1] = ' 0';

sokak kedisi (S1,S2); /*S1 ve S2 dizileriyle standart işlevi çağırın */

baskı (' Birleştirilmiş dize: %s ',S1); /*Çıktı : S1, S2 ile eklenir */

dönüş 0;
}

Programın ve çıktının anlık görüntüleri:

Metin Açıklaması otomatik olarak oluşturuldu

Orta düzeyde güvenle otomatik olarak oluşturulan Metin Açıklaması

Kitaplık İşlevini Kullanmadan İki Dizenin Birleştirilmesi

İlk dizenin sonundaki ikinci dizeyi kopyalamak için for döngüsü kullanma.

#Dahil etmek

#Dahil etmek

#define BUF_SIZE 256
intana()
{
karakterS1[BUF_SIZE],S2[BUF_SIZE]; /* Her iki dizge için S1, S2 arabelleklerini bildir*/
intuzunluk= 0,ben,J; /*Döngü geçişi için gerekli değişkenler*/

baskı ('İlk dizeyi girin'); /* İlk dizeyi girmek için kullanıcı mesajını yazdır */
fget'lar (S1,BUF_SIZE,standart); /* kullanıcı giriş dizgisi S1'de saklanacak*/
S1[ strlen (S1)-1] = ' 0';

baskı ('İkinci dizeyi girin'); /* İkinci dizeyi girmek için kullanıcı mesajını yazdır */
fget'lar (S2,BUF_SIZE,standart); /* kullanıcı giriş dizgisi S2'de saklanacak*/
S2[ strlen (S2)-1] = ' 0';
/* S1'in uzunluğunu bulmak için ilk dizgiyi dolaştır*/
için(ben=0;S1[ben]! =' 0';ben++)
{
uzunluk=uzunluk+1;
}

/*uzunluk S1'in sonuna sahip olacak ve uzunluktan başlayacak ve tüm S2'yi S1'e kopyalayacak*/
için(ben=uzunluk,J=0;S2[J]! =' 0';ben++,J++)
{
S1[ben]=S2[J];
S1[ben]=' 0';
}

/*S1 , birleştirilmiş sonucu yazdırın */
baskı (' Birleştirilmiş dize: %s ',S1);
dönüş 0;
}

Programın ve çıktının anlık görüntüleri:

Metin Açıklaması otomatik olarak oluşturuldu

Metin Açıklaması otomatik olarak oluşturuldu

Kütüphane İşlevi Olmadan Başka Bir Yol

Özyineleme kullanarak birleştirme:

stringconcatenate() fonksiyonu string1'in uzunluğunu almak için kullanılacaktır. S2 boşsa, S2'ye boş bir karakter atanır.

S2'ye, S1'in sonundaki S2'nin add elemanı olan S1[i+j]=S2[j] yerine boş karakter atanmazsa, bu, dizedeki i'nin değerini artırır.

Bir işlev, yenilenmiş dizeleri (S1,S2) argüman olarak ileterek kendisini çağıracaktır. S2 boşalana kadar tekrar tekrar çağrılır.

Birleştirilmiş S1, main() tarafından şu şekilde yazdırılacaktır:

#Dahil etmek

#Dahil etmek

#define BUF_SIZE 256

/* yukarıdaki açıklamaya göre dize bitiştirmeyi uygulayan özyinelemeli işlev */
geçersizdize bitiştirmek(karakter *S1,karakter *S2)
{
statik intben=0;
statik intJ;
J= strlen (S1);
Eğer(!S2[ben])
{
S2[ben]=' 0';
}
Başka
{
S1[J] =S2[ben];
S1[J+1] = ' 0';
ben++;
dize bitiştirmek(S1,S2);
}
}
intana()
{
karakterS1[BUF_SIZE],S2[BUF_SIZE];

baskı ('İlk dizenin değerini girin:'); /* 1. dizeyi girmek için kullanıcı mesajı */
fget'lar (S1,BUF_SIZE,standart); /* kullanıcı ilk dizgiyi girdi, S1'de sakla */
S1[ strlen (S1)-1] = ' 0';

baskı ('İkinci dizenin değerini girin:'); /* 2. dizeyi girmek için kullanıcı mesajı */
fget'lar (S2,BUF_SIZE,standart); /* kullanıcı ilk dizgiyi girdi, S2'de sakla */
S2[ strlen (S2)-1] = ' 0';

dize bitiştirmek(S1,S2); /* Fonksiyonu parametre olarak S1,S2 ile çağırın */

baskı ('dizelerin birleşimi ='%s' ',S1);
dönüş 0;
}

Programın ve çıktının anlık görüntüleri:

Metin Açıklaması otomatik olarak oluşturuldu

Metin Açıklaması otomatik olarak oluşturuldu

İşlevleri Kullanarak Birleştirme

strconcatenate() işlevi, iki dizeyi birleştirmek için main() tarafından çağrılır.

İşlev, stringlen(string1) kullanarak string1'in uzunluğunu alır.

string2[i] öğelerini string1[i+j] içinde birleştirin. Bu adım, dize boşalana kadar tekrarlanacaktır. Burada string2'yi string1'e string1'in sonunda birleştiriyoruz.

Birleştirilmiş dize(dize 1), for döngüsünün tüm yinelemeleri gerçekleştirilirken sona kadar alınacaktır.

main(), birleştirilmiş S1 dizesini yazdırır

#Dahil etmek

#Dahil etmek

#define BUF_SIZE 256

/* yukarıdaki açıklamaya göre dize birleştirmeyi uygulayan işlev */
geçersizbirleştirmek(karakter *dize1, karakter*dize2)
{
intben;
intJ= strlen (dize1);
için(ben=0;sicim2[ben];ben++)
{
dize1[ben+J]=dize2[ben];
}
dize1[ben+J]= ' 0';
}
intana()
{
karakterdize1[BUF_SIZE],dize2[BUF_SIZE];
baskı ('İlk dizeyi girin:'); /* 1. string için kullanıcı mesajı */
fget'lar (dize1,BUF_SIZE,standart); /* Kullanıcı ikinci dizgiyi girdi, dizge1'de saklandı */
dize1[ strlen (dize1)-1] = ' 0';

baskı ('İkinci dizeyi girin:'); /* 2. string için kullanıcı mesajı */
fget'lar (dize2,BUF_SIZE,standart); /* Kullanıcı ikinci dizgiyi girdi, dizge2'de saklandı */
dize2[ strlen (dize2)-1] = ' 0';

birleştirmek(dize1,dize2); /* string1 ve string2 ile fonksiyonu argüman olarak çağır*/

baskı ('Sonuç dizesi = %s' ',dize1);
dönüş 0;
}

Programın ve çıktının anlık görüntüleri:

Metin Açıklaması otomatik olarak oluşturuldu

Metin Açıklaması otomatik olarak oluşturuldu

Memcpy Kullanarak Dizi Birleştirme

Memcpy() işlevi kullanılarak, dize birleştirme işlemi, 32 bit makinede çalıştığımızı düşünürsek, bir dize arabelleğinden başka bir dize arabelleğinin sonuna kelime kelime kopyalayarak yapılır. strcat() işlevi kullanılarak dize birleştirme kullanıldığında, birleştirme, bir dize arabelleğinden başka bir dize arabelleğine bayt bayt kopyalanarak yapılır.

Bu yaklaşım performans açısından verimlidir.

Memcpy kullanırken dikkate alınması gereken tek şey '' ile ilgilenmektir.

Memcpy ile strcat elde etmek için C programı:

#Dahil etmek

#Dahil etmek

#define BUF_SIZE 256

geçersiz strcat_memcpy(karakter *S1, karakter *S2)
{
intuzunluk1,uzunluk2;
uzunluk1= strlen (S1);
uzunluk2= strlen (S2);
memcpy (S1+uzunluk1,S2,uzunluk2);
}
intana()
{

karakterdize1[BUF_SIZE],dize2[BUF_SIZE];
baskı ('İlk dizeyi girin:'); /* 1. string için kullanıcı mesajı */
fget'lar (dize1,BUF_SIZE,standart); /* Kullanıcı ikinci dizgiyi girdi, dizge1'de saklandı */
dize1[ strlen (dize1)-1] = ' 0';

baskı ('İkinci dizeyi girin:'); /* 2. string için kullanıcı mesajı */
fget'lar (dize2,BUF_SIZE,standart); /* Kullanıcı ikinci dizgiyi girdi, dizge2'de saklandı */
dize2[ strlen (dize2)-1] = ' 0';

strcat_memcpy(dize1,dize2); /* string1 ve string2 ile fonksiyonu argüman olarak çağır*/

baskı ('Sonuç dizesi = %s' ',dize1);
dönüş 0;


}

Programın ve çıktının anlık görüntüleri:

Metin Açıklaması otomatik olarak oluşturuldu

Metin Açıklaması otomatik olarak oluşturuldu

Çözüm:

Tüm bu tartışma ile C'de dizi birleştirme işlemini sonuçlandırabiliriz. Dizi birleştirme için birçok örnek ve örnek program gördük. Ana maddeleri hatırlayacağız: Biri C standardıyla diğeri kullanıcı tanımlı yol olmak üzere iki yol vardır. Kullanıcı tanımlı ayrıca, kullanıcının dize birleştirmeyi nasıl uygulamak istediğine bağlı olarak birçok türde olabilir.