Concatenación de cadena C

Concatenación de cadena C
La concatenación es el proceso para agregar la segunda cadena al final de la primera cadena. En este artículo vamos a discutir cómo concatenar cadenas en C utilizando diferentes métodos.

La función de biblioteca C estándar que se utiliza para concatenar la cadena es strcat ().

Prototipo de función:

$ char *strcat (str1, str2);

donde str1 es el primer string y str2 es la segunda cadena. El valor de retorno de la función es el puntero a la cadena concatenada.

Ahora, con la ayuda del ejemplo, veremos cómo se realiza la concatenación.

Ejemplo 1:

$ strcat (str1, str2);
donde str1 es "bella"
str2 es "whitmann"
Después de la concatenación de la cadena, la primera cadena será
STR1 "Bella Whitmann"
str2 "Whitmann"

mientras que String2 seguirá siendo el mismo.

Ejemplo2:

$ strcat (str2, str1);
donde str1 es "bella"
str2 es "whitmann"
Después de la concatenación de la cadena, la cadena concatenada será
str1 "Bella"
str2 "Bella Whitmann"

mientras que String1 seguirá siendo el mismo.

Declaración en el archivo de encabezado C

Las funciones de manejo de cadenas se declaran bajo archivo de encabezado. Si uno quiere usar la función estándar para concatenar, este archivo de encabezado debe incluirse.

Por lo tanto, podemos lograr la concatenación de cadenas de dos maneras. Uno es con el uso de la función de biblioteca C estándar y otra es sin usar la función de biblioteca C. Los siguientes son programas de ejemplo para demostrar ambas formas. La concatenación de cadena sin usar la función de la biblioteca C se puede implementar de múltiples maneras.

Discutiremos eso también en las próximas secciones con ejemplo.

Concatenación de dos cadenas utilizando la función de biblioteca C

#incluir
#incluir
#define buf_size 256
int main ()

char s1 [buf_size], s2 [buf_size]; / * Buffers de dos cadenas */
printf ("Ingrese la primera cadena \ n"); ] /* Imprima el mensaje en la consola para que el usuario ingrese la primera cadena* /
fgets (S1, buf_size, stdin); / * Almacene la cadena de entrada del usuario en S1 Buffer */
S1 [strlen (s1) -1] = '\ 0';
printf ("Ingrese la segunda cadena \ n");/* Imprimir mensaje al usuario para ingresar 2nd String*/
FGETS (S2, BUF_SIZE, STDIN); / * Almacene la cadena de entrada del usuario en S2 Buffer */
S2 [strlen (s2) -1] = '\ 0';
Strcat (S1, S2); / *Llame a la función estándar con cadenas S1 y S2 */
printf ("\ n la cadena concatenada es %s \ n \ n", s1); / *Salida: S1 se adjunta con S2 */
regresar 0;

Instantáneas del programa y salida:

Concatenación de dos cadenas sin usar la función de la biblioteca

Usando el bucle "para" para copiar la segunda cadena al final de la primera cadena.

#incluir
#incluir
#define buf_size 256
int main ()

char s1 [buf_size], s2 [buf_size]; /* Declarar los buffers S1, S2 tanto para la cadena*/
int longitud = 0, i, j; /*Variables necesarias para el recorrido de bucle*/
printf ("Ingrese la primera cadena"); / * Imprimir mensaje de usuario para ingresar la primera cadena */
fgets (S1, buf_size, stdin); /* La cadena de entrada del usuario se almacenará en S1*/
S1 [strlen (s1) -1] = '\ 0';
printf ("Ingrese la segunda cadena"); / * Imprimir mensaje de usuario para ingresar la segunda cadena */
FGETS (S2, BUF_SIZE, STDIN); /* La cadena de entrada del usuario se almacenará en S2*/
S2 [strlen (s2) -1] = '\ 0';
/* Traverse Primera cadena para encontrar la longitud de S1*/
para (i = 0; s1 [i]!= '\ 0'; i ++)

longitud = longitud+1;

/*La longitud tendrá el final del S1, comenzará desde la longitud y copiará todo el S2 en S1*/
para (i = longitud, j = 0; s2 [j]!= '\ 0'; i ++, j ++)

S1 [i] = s2 [j];
S1 [i] = '\ 0';

/ *Imprima el resultado S1, concatenado */
printf ("\ n la cadena concatenada es %s \ n \ n", s1);
regresar 0;

Instantáneas del programa y salida:

Otra forma de función sin biblioteca

Concatenación utilizando la recursión:

La función StringConcataNate () se usará para obtener la longitud de String1. Si S2 está vacío, entonces se asignará un carácter nulo a S2.

Si el carácter nulo no se asigna a S2 que agregar elemento de S2 al final de S1 que es S1 [i+j] = S2 [J], esto aumenta el valor de I en la cadena.

Una función se llamará a sí misma aprobando las cuerdas reformadas (S1, S2) como argumento. Se llamará una y otra vez hasta que el S2 esté vacío.

El S1 concatenado se imprimirá por Main () como

#incluir
#incluir
#define buf_size 256
/ * función recursiva para implementar la concatenación de cadenas según la descripción anterior */
void stringconcatenate (char *s1, char *s2)

static int i = 0;
static int j;
j = strlen (S1);
si(!S2 [i])

S2 [i] = '\ 0';

demás

S1 [j] = s2 [i];
S1 [j+1] = '\ 0';
i ++;
StringConcatenate (S1, S2);


int main ()

char s1 [buf_size], s2 [buf_size];
printf ("Ingrese el valor de la primera cadena:"); / * Mensaje de usuario para ingresar la primera cadena */
fgets (S1, buf_size, stdin); / * Entrada de usuario Primera cadena, almacenar en S1 */
S1 [strlen (s1) -1] = '\ 0';
printf ("Ingrese el valor de la segunda cadena:"); / * Mensaje de usuario para ingresar 2nd String */
FGETS (S2, BUF_SIZE, STDIN); / * Entrada de usuario Primera cadena, almacenar en S2 */
S2 [strlen (s2) -1] = '\ 0';
StringConcatenate (S1, S2); / * Llame a la función con S1, S2 como parámetros */
printf ("combinación de cadenas = '%s' \ n", s1);
regresar 0;

Instantáneas del programa y salida:

Concatenación mediante el uso de funciones

La función strconcataNate () es llamada por main () para combinar dos cuerdas.

La función obtiene la longitud de String1 usando StringLen (String1).

Conjunto de los elementos de String2 [i] en String1 [i+j]. Este paso se repetirá hasta que la cadena esté vacía. Aquí, junto con la cadena2 a String1 al final de String1.

La cadena concatenada (cadena 1) se recibirá al final cuando se realizarán todas las iteraciones de For Loop.

El main () imprime la cadena concatenada S1

#incluir
#incluir
#define buf_size 256
/ * función para implementar la concatenación de cadenas según la descripción anterior */
void strconcatenate (char *string1, char *string2)

int i;
int j = strlen (string1);
para (i = 0; cadena 2 [i]; i ++)

string1 [i+j] = string2 [i];

String1 [i+j] = '\ 0';

int main ()

char string1 [buf_size], string2 [buf_size];
printf ("Ingrese la primera cadena:"); / * Mensaje de usuario para la primera cadena */
fgets (string1, buf_size, stdin); / * Entrada de usuario Segunda cadena, almacenada en String1 */
String1 [strlen (string1) -1] = '\ 0';
printf ("Ingrese la segunda cadena:"); / * Mensaje de usuario para 2nd String */
fgets (string2, buf_size, stdin); / * Entrada de usuario Segunda cadena, almacenada en String2 */
string2 [strlen (string2) -1] = '\ 0';
strconcataNate (string1, string2); /* Llame a la función con String1 y String2 como argumentos*/
printf ("resultante string = %s '\ n", string1);
regresar 0;

Instantáneas del programa y salida:

Concatenación de cadena usando MEMCPY

Al usar la función memcpy (), la concatenación de la cadena se realiza copiando palabra por palabra de un búfer de cadena al final de otro búfer de cadena donde el tamaño de la palabra es 4 bytes considerando que estamos ejecutando en una máquina de 32 bits mientras que cuando hacemos una concatenación de cadena por Usando la concatenación de cadena usando la función strcat (), la concatenación se realiza copiando byte por byte de un búfer de cadena a otro búfer de cadena.

Este enfoque es eficiente en el rendimiento.

La única consideración al usar MEMCPY es cuidar '\ 0'.

Programa C para lograr el STRCAT con MEMCPY:

#incluir
#incluir
#define buf_size 256
Void strcat_memcpy (char *s1, char *s2)

int longitud1, longitud2;
longitud1 = strlen (S1);
longitud2 = strlen (S2);
memcpy (s1+longitud1, s2, longitud2);

int main ()

char string1 [buf_size], string2 [buf_size];
printf ("Ingrese la primera cadena:"); / * Mensaje de usuario para la primera cadena */
fgets (string1, buf_size, stdin); / * Entrada de usuario Segunda cadena, almacenada en String1 */
String1 [strlen (string1) -1] = '\ 0';
printf ("Ingrese la segunda cadena:"); / * Mensaje de usuario para 2nd String */
fgets (string2, buf_size, stdin); / * Entrada de usuario Segunda cadena, almacenada en String2 */
string2 [strlen (string2) -1] = '\ 0';
strcat_memcpy (string1, string2); /* Llame a la función con String1 y String2 como argumentos*/
printf ("resultante string = %s '\ n", string1);
regresar 0;

Instantáneas del programa y salida:

Conclusión:

Con toda esta discusión podemos concluir la concatenación de cadenas en c. Hemos visto muchos ejemplos y programas de muestra para la concatenación de cadenas. Recordaremos los elementos principales: hay dos maneras, una con estándar C y otra es la forma definida por el usuario. Definido del usuario puede ser de muchos tipos, depende de cómo el usuario desea implementar la concatenación de cadenas.