C Styginių sujungimas

C String Concatenation



Sujungimas yra procesas, kurio metu antroji eilutė pridedama prie pirmosios eilutės pabaigos. Šiame straipsnyje aptarsime, kaip sujungti eilutes C naudojant skirtingus metodus.

Standartinė C bibliotekos funkcija, naudojama eilutėms sujungti, yra strcat ().







Funkcijos prototipas:

$anglis * strcat (str1,str2);

kur str1 yra pirmoji eilutė, o str2 - antroji eilutė. Funkcijos grąžinimo vertė yra rodyklė į sujungtą eilutę.



Dabar, naudodamiesi pavyzdžiu, pamatysime, kaip atliekamas sujungimas.



1 pavyzdys:

$ strcat (str1,str2);
kur str1 yra Bella
str2 yra Whitmann

po eilutės sujungimo,bus pirmoji eilutė

str1 Bella Whitmann
str2 Whitmann

o eilutė2 išliks ta pati.





2 pavyzdys:

$ strcat (str2,str1);
kur str1 yra Bella
str2 yra Whitmann

po eilutės sujungimo,bus sujungta eilutė

str1 Bella
str2 Bella Whitmann

o eilutė 1 išliks ta pati.

Deklaracija C antraštės faile

Eilutės tvarkymo funkcijos yra deklaruojamos po antrašte. Jei norima sujungti standartinę funkciją, reikia įtraukti šį antraštės failą.



Taigi, mes galime pasiekti stygų sujungimą dviem būdais. Viena yra naudojant standartinę C bibliotekos funkciją, o kita - nenaudojant C bibliotekos funkcijos. Toliau pateikiami programų pavyzdžiai, parodantys abu būdus. Eilutės sujungimas nenaudojant C bibliotekos funkcijos gali būti įgyvendinamas keliais būdais.

Mes taip pat aptarsime tai sekančiuose skyriuose su pavyzdžiu.

Dviejų eilučių sujungimas naudojant C bibliotekos funkciją

#įtraukti

#įtraukti

#6256
tarptpagrindinis()
{
anglisS1[BUF_SIZE],S2[BUF_SIZE]; / * Du eilutės buferiai */

printf ('Įveskite pirmąją eilutę n'); ] /* Spausdinkite pranešimą į konsolę, kad vartotojas galėtų įvesti 1 eilutę*/
fgets (S1,BUF_SIZE,stdin); / * saugokite vartotojo įvesties eilutę S1 buferyje */
S1[ strlenas (S1)-1] = ' 0';

printf ('Įveskite antrąją eilutę n');/* Spausdinkite pranešimą vartotojui, kad įvestumėte antrąją eilutę*/
fgets (S2,BUF_SIZE,stdin); / * saugokite vartotojo įvesties eilutę S2 buferyje */
S2[ strlenas (S2)-1] = ' 0';

strcat (S1,S2); / *Skambinkite standartine funkcija su S1 ir S2 eilutėmis */

printf (' nSujungta eilutė yra %s n n',S1); / *Išėjimas: S1 pridedamas prie S2 */

grįžti 0;
}

Programos ir išvesties momentinės nuotraukos:

Teksto aprašymas sugeneruojamas automatiškai

Teksto aprašymas automatiškai sugeneruotas vidutiniškai užtikrintai

Dviejų eilučių sujungimas nenaudojant bibliotekos funkcijos

Naudojant ciklą, norint nukopijuoti antrąją eilutę pirmosios eilutės pabaigoje.

#įtraukti

#įtraukti

#6256
tarptpagrindinis()
{
anglisS1[BUF_SIZE],S2[BUF_SIZE]; /* Paskelbkite buferius S1, S2 abiem eilutėms*/
tarptilgio= 0,i,j; /*Kintamieji, reikalingi kilpos perėjimui*/

printf („Įveskite pirmąją eilutę“); / * Spausdinkite vartotojo pranešimą, kad įvestumėte pirmąją eilutę */
fgets (S1,BUF_SIZE,stdin); /* vartotojo įvesties eilutė bus saugoma S1*/
S1[ strlenas (S1)-1] = ' 0';

printf („Įveskite antrąją eilutę“); / * Spausdinkite vartotojo pranešimą, kad įvestumėte antrąją eilutę */
fgets (S2,BUF_SIZE,stdin); /* vartotojo įvesties eilutė bus saugoma S2*/
S2[ strlenas (S2)-1] = ' 0';
/* Pereikite pirmąją eilutę, kad surastumėte S1 ilgį*/
dėl(i=0;S1[i]! =' 0';i++)
{
ilgio=ilgio+1;
}

/*ilgis turės S1 pabaigą, pradėkite nuo ilgio ir nukopijuokite visą S2 į S1*/
dėl(i=ilgio,j=0;S2[j]! =' 0';i++,j++)
{
S1[i]=S2[j];
S1[i]=' 0';
}

/ *Spausdinkite S1, sujungtą rezultatą */
printf (' nSujungta eilutė yra %s n n',S1);
grįžti 0;
}

Programos ir išvesties momentinės nuotraukos:

Teksto aprašymas sugeneruojamas automatiškai

Teksto aprašymas sugeneruojamas automatiškai

Kitas būdas be bibliotekos funkcijos

Sujungimas naudojant rekursiją:

Funkcija stringconcatenate () bus naudojama norint gauti eilutės1 ​​ilgį. Jei S2 tuščias, S2 priskiriamas nulinis simbolis.

Jei S2 nėra priskirtas nulinis simbolis, S1 pabaigoje pridėkite S2 elementą, kuris yra S1 [i+j] = S2 [j], tai padidina i reikšmę eilutėje.

Funkcija bus vadinama perduodant reformuotas eilutes (S1, S2) kaip argumentą. Jis bus skambinamas vėl ir vėl, kol S2 bus tuščias.

Sujungtas S1 bus atspausdintas pagrindiniu () as

#įtraukti

#įtraukti

#6256

/ * rekursinė funkcija, skirta įgyvendinti eilutės sujungimą, kaip aprašyta aukščiau */
tuštumastringconcatenate(anglis *S1,anglis *S2)
{
statinis tarpti=0;
statinis tarptj;
j= strlenas (S1);
jei(!S2[i])
{
S2[i]=' 0';
}
Kitas
{
S1[j] =S2[i];
S1[j+1] = ' 0';
i++;
stringconcatenate(S1,S2);
}
}
tarptpagrindinis()
{
anglisS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Įveskite pirmosios eilutės reikšmę:'); / * vartotojo pranešimas įvesti 1 eilutę */
fgets (S1,BUF_SIZE,stdin); / * vartotojas įveda pirmąją eilutę, saugo S1 */
S1[ strlenas (S1)-1] = ' 0';

printf ('Įveskite antrosios eilutės reikšmę:'); / * vartotojo pranešimas įvesti 2 eilutę */
fgets (S2,BUF_SIZE,stdin); / * vartotojas įveda pirmąją eilutę, saugo S2 */
S2[ strlenas (S2)-1] = ' 0';

stringconcatenate(S1,S2); / * Skambinkite funkcijai su parametrais S1, S2 */

printf ('eilučių derinys ='%s ' n',S1);
grįžti 0;
}

Programos ir išvesties momentinės nuotraukos:

Teksto aprašymas sugeneruojamas automatiškai

Teksto aprašymas sugeneruojamas automatiškai

Sujungimas naudojant funkcijas

Funkciją strconcatenate () pagrindinė () vadina, kad sujungtų dvi eilutes.

Funkcija gauna eilutės1 ​​ilgį naudodami stringlen (string1).

Sujunkite eilutės2 [i] elementus eilutėje1 [i+j]. Šis veiksmas bus kartojamas tol, kol eilutė bus tuščia. Čia eilutės2 pabaigoje pridedame eilutę2 prie eilutės1.

Sujungta eilutė (eilutė 1) bus gauta iki pabaigos, kai bus atliktos visos ciklo iteracijos.

Pagrindinis () spausdina sujungtą eilutę S1

#įtraukti

#įtraukti

#6256

/ * funkcija, skirta įgyvendinti eilutės sujungimą, kaip aprašyta aukščiau */
tuštumastrconcatenate(anglis *eilutė1, anglis*eilutė2)
{
tarpti;
tarptj= strlenas (eilutė1);
dėl(i=0;eilutė2[i];i++)
{
eilutė1[i+j]=eilutė2[i];
}
eilutė1[i+j]= ' 0';
}
tarptpagrindinis()
{
angliseilutė1[BUF_SIZE],eilutė2[BUF_SIZE];
printf ('Įveskite pirmąją eilutę:'); / * 1 eilutės vartotojo pranešimas */
fgets (eilutė1,BUF_SIZE,stdin); / * Antroji vartotojo įvesties eilutė, saugoma eilutėje1 */
eilutė1[ strlenas (eilutė1)-1] = ' 0';

printf ('Įveskite antrąją eilutę:'); / * 2 eilutės vartotojo pranešimas */
fgets (eilutė2,BUF_SIZE,stdin); / * Antroji vartotojo įvesties eilutė, išsaugota eilutėje2 */
eilutė2[ strlenas (eilutė2)-1] = ' 0';

strconcatenate(eilutė1,eilutė2); /* Skambinkite funkcijai su argumentais string1 ir string2 kaip argumentus*/

printf ('Gautoji eilutė = %s' n',eilutė1);
grįžti 0;
}

Programos ir išvesties momentinės nuotraukos:

Teksto aprašymas sugeneruojamas automatiškai

Teksto aprašymas sugeneruojamas automatiškai

Eilutės sujungimas naudojant memcpy

Naudojant funkciją memcpy (), eilutės sujungimas atliekamas kopijuojant žodį po žodžio iš vieno eilutės buferio į kito eilutės buferio pabaigą, kur žodžio dydis yra 4 baitai, atsižvelgiant į tai, kad mes veikiame 32 bitų kompiuteryje, o kai mes sujungiame eilutes naudojant stygų sujungimą naudojant funkciją strcat (), sujungimas atliekamas kopijuojant baitą baitu iš vieno eilutės buferio į kitą eilutės buferį.

Šis metodas yra efektyvus.

Vienintelis dėmesys naudojant „memcpy“ yra pasirūpinti „ 0“.

C programa, skirta pasiekti strcat su memcpy:

#įtraukti

#įtraukti

#6256

Negalioja strcat_memcpy(anglis *S1, anglis *S2)
{
tarptilgis1,ilgis2;
ilgis1= strlenas (S1);
ilgis2= strlenas (S2);
prisiminęs (S1+ilgis1,S2,ilgis2);
}
tarptpagrindinis()
{

angliseilutė1[BUF_SIZE],eilutė2[BUF_SIZE];
printf ('Įveskite pirmąją eilutę:'); / * 1 eilutės vartotojo pranešimas */
fgets (eilutė1,BUF_SIZE,stdin); / * Antroji vartotojo įvesties eilutė, saugoma eilutėje1 */
eilutė1[ strlenas (eilutė1)-1] = ' 0';

printf ('Įveskite antrąją eilutę:'); / * 2 eilutės vartotojo pranešimas */
fgets (eilutė2,BUF_SIZE,stdin); / * Antroji vartotojo įvesties eilutė, išsaugota eilutėje2 */
eilutė2[ strlenas (eilutė2)-1] = ' 0';

strcat_memcpy(eilutė1,eilutė2); /* Skambinkite funkcijai su argumentais string1 ir string2 kaip argumentus*/

printf ('Gautoji eilutė = %s' n',eilutė1);
grįžti 0;


}

Programos ir išvesties momentinės nuotraukos:

Teksto aprašymas sugeneruojamas automatiškai

Teksto aprašymas sugeneruojamas automatiškai

Išvada:

Su visa šia diskusija galime padaryti išvadą apie stygų sujungimą C. Mes matėme daug pavyzdžių ir pavyzdinių programų, skirtų eilių sujungimui. Prisiminsime pagrindinius elementus: Yra du būdai: vienas su C standartu, kitas - vartotojo apibrėžtas būdas. Be to, vartotojo apibrėžtas gali būti įvairių tipų, priklauso nuo to, kaip vartotojas nori įgyvendinti eilutės sujungimą.