Concatenació de cadenes C

C String Concatenation



La concatenació és el procés per afegir la segona cadena al final de la primera cadena. En aquest article analitzarem com concatenar les cadenes en C mitjançant diferents mètodes.

La funció de biblioteca C estàndard que s’utilitza per concatenar la cadena és strcat ().







Prototip de funció:

$char * strcat (str1,str2);

on str1 és la primera cadena i str2 és la segona cadena. El valor de retorn de la funció és el punter a la cadena concatenada.



Ara, amb l'ajut de l'exemple, veurem com es realitza la concatenació.



Exemple 1:

$ strcat (str1,str2);
on str1 és Bella
str2 és Whitmann

després de la concatenació de la cadena,primera cadena serà

str1 Bella Whitmann
str2 Whitmann

mentre que la cadena2 seguirà sent la mateixa.





Exemple 2:

$ strcat (str2,str1);
on str1 és Bella
str2 és Whitmann

després de la concatenació de la cadena,serà una cadena concatenada

str1 Bella
str2 Bella Whitmann

mentre que la cadena1 seguirà sent la mateixa.

Declaració al fitxer de capçalera C.

Les funcions de manipulació de cadenes es declaren a headerfile. Si es vol utilitzar la funció estàndard per concatenar, cal incloure aquest fitxer de capçalera.



Per tant, podem aconseguir la concatenació de cadenes de dues maneres. Un és utilitzar la funció de biblioteca C estàndard i l’altre és no fer servir la funció de biblioteca C. A continuació es mostren exemples de programes per demostrar les dues maneres. La concatenació de cadenes sense utilitzar la funció de biblioteca C es pot implementar de diverses maneres.

També ho parlarem en les properes seccions amb exemple.

Concatenació de dues cadenes mitjançant la funció de biblioteca C

#incloure

#incloure

#define BUF_SIZE 256
intprincipal()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Dues memòries intermèdies de cadenes * /

printf ('Introduïu la primera cadena n'); ] / * Imprimeix el missatge a la consola perquè l'usuari introdueixi la primera cadena * /
fgets (S1,BUF_SIZE,stdin); / * emmagatzema la cadena d'entrada de l'usuari al buffer S1 * /
S1[ strlen (S1)-1] = ' 0';

printf ('Introduïu la segona cadena n');/ * Imprimeix el missatge a l'usuari per introduir la segona cadena * /
fgets (S2,BUF_SIZE,stdin); / * emmagatzema la cadena d'entrada de l'usuari al buffer S2 * /
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); / * Truqueu a la funció estàndard amb les cadenes S1 i S2 * /

printf (' nLa cadena concatenada és% s n n',S1); / * Sortida: S1 s’afegeix amb S2 * /

tornar 0;
}

Instantànies del programa i sortida:

Descripció del text generada automàticament

Descripció del text generada automàticament amb confiança mitjana

Concatenació de dues cadenes sense utilitzar la funció de biblioteca

Utilitzant el bucle for per copiar la segona cadena al final de la primera cadena.

#incloure

#incloure

#define BUF_SIZE 256
intprincipal()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Declareu els buffers S1, S2 per a la cadena * /
intllargada= 0,jo,j; / * Variables necessàries per al recorregut del bucle * /

printf ('Introduïu la primera cadena'); / * Imprimeix el missatge de l'usuari per introduir la primera cadena * /
fgets (S1,BUF_SIZE,stdin); / * la cadena d'entrada de l'usuari s'emmagatzemarà a S1 * /
S1[ strlen (S1)-1] = ' 0';

printf ('Introduïu la segona cadena'); / * Imprimeix el missatge de l'usuari per introduir la segona cadena * /
fgets (S2,BUF_SIZE,stdin); / * la cadena d'entrada de l'usuari s'emmagatzemarà a S2 * /
S2[ strlen (S2)-1] = ' 0';
/ * Recorre la primera cadena per trobar la longitud de S1 * /
per(jo=0;S1[jo]! =' 0';jo++)
{
llargada=llargada+1;
}

/ * La longitud tindrà el final del S1, començarà de la longitud i copiarà el S2 sencer a S1 * /
per(jo=llargada,j=0;S2[j]! =' 0';jo++,j++)
{
S1[jo]=S2[j];
S1[jo]=' 0';
}

/ * Imprimiu el resultat concatenat S1 * /
printf (' nLa cadena concatenada és% s n n',S1);
tornar 0;
}

Instantànies del programa i sortida:

Descripció del text generada automàticament

Descripció del text generada automàticament

Una altra manera de funcionar sense biblioteca

Concatenació mitjançant recursió:

La funció stringconcatenate () s'utilitzarà per obtenir la longitud de string1. Si S2 està buit, s'assignarà un caràcter nul a S2.

Si no s’assigna cap caràcter nul a S2, afegiu un element de S2 al final de S1 que és S1 [i + j] = S2 [j], això augmenta el valor d’i a la cadena.

Una funció es dirà a si mateixa passant les cadenes reformades (S1, S2) com a argument. Es cridarà una i altra vegada fins que el S2 estigui buit.

Main () imprimirà el S1 concatenat com

#incloure

#incloure

#define BUF_SIZE 256

/ * funció recursiva per implementar la concatenació de cadenes segons la descripció anterior * /
buitstringconcatenate(char *S1,char *S2)
{
estàtic intjo=0;
estàtic intj;
j= strlen (S1);
si(!S2[jo])
{
S2[jo]=' 0';
}
en cas contrari
{
S1[j] =S2[jo];
S1[j+1] = ' 0';
jo++;
stringconcatenate(S1,S2);
}
}
intprincipal()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Introduïu el valor de la primera cadena:'); / * missatge de l'usuari per introduir la primera cadena * /
fgets (S1,BUF_SIZE,stdin); / * entrada de l'usuari primera cadena, emmagatzema a S1 * /
S1[ strlen (S1)-1] = ' 0';

printf ('Introduïu el valor de la segona cadena:'); / * missatge de l'usuari per introduir la segona cadena * /
fgets (S2,BUF_SIZE,stdin); / * entrada de l'usuari primera cadena, emmagatzema a S2 * /
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); / * Truqueu a la funció amb S1, S2 com a paràmetres * /

printf ('combination of strings ='% s ' n',S1);
tornar 0;
}

Instantànies del programa i sortida:

Descripció del text generada automàticament

Descripció del text generada automàticament

Concatenació mitjançant l'ús de funcions

La funció strconcatenate () és cridada per main () per combinar dues cadenes.

La funció obté la longitud de string1 mitjançant stringlen (string1).

Adjunteu els elements de la cadena2 [i] a la cadena1 [i + j]. Aquest pas es repetirà fins que la cadena estigui buida. Aquí, adjuntem la cadena2 a la cadena1 al final de la cadena1.

La cadena concatenada (cadena 1) es rebrà al final quan es realitzin totes les iteracions de bucle for.

El main () imprimeix la cadena concatenada S1

#incloure

#incloure

#define BUF_SIZE 256

/ * funció per implementar la concatenació de cadenes segons la descripció anterior * /
buitstrconcatenate(char *cadena1, char*cadena2)
{
intjo;
intj= strlen (cadena1);
per(jo=0;corda2[jo];jo++)
{
cadena1[jo+j]=cadena2[jo];
}
cadena1[jo+j]= ' 0';
}
intprincipal()
{
charcadena1[BUF_SIZE],cadena2[BUF_SIZE];
printf ('Introduïu la primera cadena:'); / * Missatge d'usuari per a la primera cadena * /
fgets (cadena1,BUF_SIZE,stdin); / * Entrada de l'usuari segona cadena, emmagatzemada a cadena1 * /
cadena1[ strlen (cadena1)-1] = ' 0';

printf ('Introduïu la segona cadena:'); / * Missatge d'usuari per a la segona cadena * /
fgets (cadena2,BUF_SIZE,stdin); / * Entrada de l'usuari segona cadena, emmagatzemada a cadena2 * /
cadena2[ strlen (cadena2)-1] = ' 0';

strconcatenate(cadena1,cadena2); / * Crida a la funció amb cadena1 i cadena2 com a arguments * /

printf ('Cadena resultant =% s' n',cadena1);
tornar 0;
}

Instantànies del programa i sortida:

Descripció del text generada automàticament

Descripció del text generada automàticament

Concatenació de cadenes mitjançant memcpy

Mitjançant la funció memcpy (), la concatenació de cadenes es realitza copiant paraula per paraula d’una memòria intermèdia de cadenes fins al final d’una altra memòria intermèdia de cadenes on la mida de la paraula és de 4 bytes tenint en compte que estem executant una màquina de 32 bits mentre fem la concatenació de cadenes per mitjançant la concatenació de cadenes mitjançant la funció strcat (), la concatenació es fa copiant byte per byte d’un buffer de cadena a un altre buffer de cadena.

Aquest enfocament és eficient en el rendiment.

L’única consideració que s’utilitza durant l’ús de memcpy és tenir cura de ‘ 0’.

Programa C per aconseguir l'strcat amb memcpy:

#incloure

#incloure

#define BUF_SIZE 256

Buida strcat_memcpy(char *S1, char *S2)
{
intlongitud1,longitud2;
longitud1= strlen (S1);
longitud2= strlen (S2);
memcpy (S1+longitud1,S2,longitud2);
}
intprincipal()
{

charcadena1[BUF_SIZE],cadena2[BUF_SIZE];
printf ('Introduïu la primera cadena:'); / * Missatge d'usuari per a la primera cadena * /
fgets (cadena1,BUF_SIZE,stdin); / * Entrada de l'usuari segona cadena, emmagatzemada a cadena1 * /
cadena1[ strlen (cadena1)-1] = ' 0';

printf ('Introduïu la segona cadena:'); / * Missatge d'usuari per a la segona cadena * /
fgets (cadena2,BUF_SIZE,stdin); / * Entrada de l'usuari segona cadena, emmagatzemada a cadena2 * /
cadena2[ strlen (cadena2)-1] = ' 0';

strcat_memcpy(cadena1,cadena2); / * Crida a la funció amb cadena1 i cadena2 com a arguments * /

printf ('Cadena resultant =% s' n',cadena1);
tornar 0;


}

Instantànies del programa i sortida:

Descripció del text generada automàticament

Descripció del text generada automàticament

Conclusió:

Amb tota aquesta discussió podem concloure la concatenació de cadenes a C. Hem vist molts exemples i exemples de programes per a la concatenació de cadenes. Recordarem els ítems principals: hi ha dues maneres, una amb l'estàndard C i l'altra és definida per l'usuari. La definició de l'usuari pot ser de molts tipus, depèn de com vulgui implementar la concatenació de cadenes.