C++ Funciones de cadena: strcpy(), strcat(), strlen(), strcmp()

โšก Resumen inteligente

C++ Las funciones de cadena como `strcpy`, `strcat`, `strlen` y `strcmp` permiten a los programas copiar, unir, medir y comparar texto. Este recurso explica quรฉ es una cadena, cรณmo declarar cadenas al estilo de C y con `std::string`, acceder a sus valores y aplicar las funciones bรกsicas de cadena con ejemplos.

  • ๐Ÿ”ค Definiciรณn bรกsica: Una cadena es una secuencia de caracteres; una C++ string es un objeto de la clase std::string.
  • ๐Ÿงฑ Dos declaraciones: C++ Admite matrices de caracteres al estilo C terminadas por '\0' y el tipo de clase std::string, que es mรกs seguro.
  • ๐Ÿ“ฅ Acceso a valores: Las cadenas se leen e imprimen por su nombre, como se demuestra con matrices de caracteres y con std::string.
  • ๐Ÿ› ๏ธ Funciones de cadena: strcpy copia, strcat concatena, strlen mide la longitud y strcmp compara dos cadenas.
  • ๐Ÿ“ฆ Encabezado obligatorio: Las funciones de cadena de C se encuentran en el archivo de cabecera cstring, que debe incluirse antes de su uso.

C++ Funciones de cadena

ยฟQuรฉ es una cadena?

Una cadena es una secuencia de caracteres. A C++ string es un objeto de la clase std::string. Los caracteres se almacenan como secuencias de bytes, permitiรฉndose el acceso a un รบnico byte de carรกcter.

C++ Las cadenas asignan memoria dinรกmicamente. Se puede asignar mรกs memoria a la cadena durante la ejecuciรณn si es necesario. Dado que no hay preasignaciรณn de memoria, no se desperdicia memoria. Podemos realizar diversas operaciones con cadenas, como comparaciรณn, concatenaciรณn, conversiรณn, etc.

Declarar cadenas

C++ admite dos tipos de declaraciones de cadenas:

  • Cadena de caracteres estilo C
  • Tipo de clase de cadena

Cadena de caracteres estilo C

Este tipo de declaraciรณn de cadena se introdujo en el Lenguaje de programaciรณn C. C++ sigue siendo compatible. Se trata simplemente de una matriz unidimensional de caracteres terminada con un carรกcter nulo (\0). Una cadena terminada en nulo tiene los caracteres que la componen seguidos de un carรกcter nulo.

Considere la declaraciรณn de cadena que se proporciona a continuaciรณn:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

La declaraciรณn anterior crea una cadena que forma la palabra John. La palabra tiene 4 caracteres, pero la cadena tiene un tamaรฑo de 5. El espacio adicional permite almacenar el carรกcter nulo.

Usando la regla de inicializaciรณn de la matriz, podemos escribir la declaraciรณn anterior de la siguiente manera:

char name[] = "John";

Tenga en cuenta que no es necesario colocar el carรกcter nulo al final de la constante de cadena. C++ El compilador colocarรก automรกticamente el '\0' al final de la cadena al inicializar la matriz.

std :: string

El C++ La biblioteca proporciona la clase string, que admite diversas operaciones con cadenas. Se escribe como std::string.

Para utilizar esta clase, primero debemos incluirla en nuestro espacio de trabajo utilizando el preprocesador #include como se muestra a continuaciรณn:

#include <string>

A continuaciรณn, podemos declarar nuestra cadena usando la palabra clave string. Por ejemplo:

string name = "John";

La declaraciรณn anterior crearรก una cadena llamada nombre para contener el valor John.

Accediendo a valores de cadena

In C++, podemos acceder a los valores de la cadena usando el nombre de la cadena. Por ejemplo:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

Salida:

Accediendo a valores de cadena

Aquรญ hay una captura de pantalla del cรณdigo:

Accediendo a valores de cadena

Code Explicaciรณn:

  1. Incluyendo el archivo de encabezado iostream en nuestro cรณdigo. Nos permitirรก leer y escribir en la consola.
  2. Incluyendo el espacio de nombres estรกndar para usar sus clases y funciones sin llamarlo.
  3. Llamada a la funciรณn main() dentro de la cual se debe agregar la lรณgica del programa. La llave { marca el inicio del cuerpo de la funciรณn main().
  4. Declarando una cadena de caracteres y dรกndole el nombre nombre. La cadena almacenarรก el valor John. El espacio extra almacenarรก el carรกcter nulo.
  5. Imprimiendo algรบn texto en la consola.
  6. Imprimiendo el valor de la cadena denominada nombre en la consola.
  7. La funciรณn main() deberรญa devolver un valor si el programa funciona bien.
  8. Fin del cuerpo de la funciรณn main().

Aquรญ hay otro ejemplo usando el C++ clase de cadena estรกndar:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

Salida:

Accediendo a valores de cadena

Aquรญ hay una captura de pantalla del cรณdigo:

Accediendo a valores de cadena

Code Explicaciรณn:

  1. Incluyendo el archivo de encabezado iostream en nuestro cรณdigo. Nos permitirรก leer y escribir en la consola.
  2. Incluyendo la clase de cadena estรกndar en nuestro cรณdigo.
  3. Incluyendo el espacio de nombres estรกndar para usar sus clases y funciones sin llamarlo.
  4. Llamada a la funciรณn main() dentro de la cual se debe agregar la lรณgica del programa. La llave { marca el inicio del cuerpo de la funciรณn main().
  5. Declarar una cadena y darle el nombre name. La cadena almacenarรก el valor. Guru99.
  6. Imprimiendo el valor del nombre de la cadena junto con algรบn texto en la consola.
  7. La funciรณn main() deberรญa devolver un valor si el programa funciona bien.
  8. Fin del cuerpo de la funciรณn main().

Funciones de cadena en C++

A menudo querrรกs manipular cadenas. C++ proporciona una amplia gama de funciones que puede utilizar para ello. Estas funciones estรกn definidas en el encabezado, por lo que debemos incluirlo en nuestro cรณdigo para poder usar las funciones. Analicemos algunas:

strcpy ()

Esta es la funciรณn de copia de cadena. Copia una cadena en otra cadena.

Sintaxis:

strcpy(string1, string2);

Los dos parรกmetros de la funciรณn, string1 y string2, son cadenas de texto. La funciรณn copiarรก la cadena string2 en string1.

strcat ()

Esta es la funciรณn de concatenaciรณn de cadenas. Concatena cadenas.

Sintaxis:

strcat(string1, string2);

Los dos parรกmetros de la funciรณn, string1 y string2, son las cadenas que se van a concatenar. La funciรณn anterior concatenarรก la cadena string2 al final de la cadena string1.

strlen ()

Esta es la funciรณn de longitud de la cadena. Devuelve la longitud de la cadena que se le pasa como argumento.

Sintaxis:

strlen(string1);

El parรกmetro cadena1 es el nombre de la cadena cuya longitud se va a determinar. La funciรณn anterior devolverรก la longitud de la cadena cadena1.

strcmp ()

Esta es la funciรณn de comparaciรณn de cadenas. Se utiliza para comparar cadenas.

Sintaxis:

strcmp(string1, string2);

La funciรณn anterior devolverรก 0 si las cadenas string1 y string2 son similares, menor que 0 si string1 < string2 y mayor que 0 si string1 > string2.

Ejemplo:

El siguiente ejemplo demuestra cรณmo utilizar las funciones de cadena anteriores:

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

Salida:

Funciones de cadena en C++

Aquรญ hay una captura de pantalla del cรณdigo:

Funciones de cadena en C++

Code Explicaciรณn:

  1. Incluyendo el archivo de encabezado iostream en nuestro cรณdigo. Nos permitirรก leer y escribir en la consola.
  2. Incluyendo el estรกndar encabezado en nuestro cรณdigo.
  3. Incluyendo el espacio de nombres estรกndar para usar sus clases y funciones sin llamarlo.
  4. Llamada a la funciรณn main() dentro de la cual se debe agregar la lรณgica del programa. La llave { marca el inicio del cuerpo de la funciรณn main().
  5. Declarar una cadena de 10 caracteres y darle el nombre name1. La cadena almacenarรก el valor. Guru99.
  6. Declarando una cadena de 10 caracteres y dรกndole el nombre nombre2. La cadena almacenarรก el valor John.
  7. Declarando una cadena de 10 caracteres y dรกndole el nombre nombre3.
  8. Declarando un variable entera llamado len.
  9. Copiando la cadena nombre1 en la cadena nombre3.
  10. Imprimir el valor de la cadena name3 junto con algรบn texto en la consola. Deberรญa imprimir Guru99.
  11. Concatenando la cadena name2 al final de la cadena name1. El valor de name1 ahora es Guru99Juan.
  12. Imprimir el valor de la cadena name1 junto con algรบn texto en la consola. Deberรญa imprimir Guru99Juan.
  13. Determinar la longitud de la cadena llamada name1 y asignar el valor de dicha longitud a la variable len.
  14. Imprimir el valor de la variable len junto con otro texto en la consola.
  15. La funciรณn main() deberรญa devolver un valor si el programa funciona bien.
  16. Fin del cuerpo de la funciรณn main().

Preguntas Frecuentes

Sรญ. Los asistentes de IA pueden convertir matrices de caracteres a std::string, actualizar las funciones relacionadas y explicar las ventajas en materia de seguridad. Aun asรญ, los desarrolladores deben revisar los cambios para detectar casos lรญmite, tamaรฑos de bรบfer y el comportamiento previsto.

Sรญ. Las herramientas de IA generan ejemplos resueltos, explican el comportamiento de `strcpy` y `strcat`, e indican los riesgos de desbordamiento de bรบfer. Esto acelera la comprensiรณn, pero ejecutar el cรณdigo uno mismo sigue siendo la mejor manera de confirmar su funcionamiento.

std::string gestiona la memoria dinรกmicamente y proporciona operaciones integradas como la concatenaciรณn y la comparaciรณn. Las cadenas de estilo C son matrices de caracteres fijas terminadas en '\0' que requieren gestiรณn manual de la memoria y son mรกs propensas a errores.

Pueden provocar desbordamientos de bรบfer si el array de destino es demasiado pequeรฑo. Entre las alternativas mรกs seguras se incluyen strncpy, strncat o simplemente el uso de operaciones std::string, que gestionan la memoria automรกticamente y reducen estos riesgos.

Resumir este post con: