Tema 11 - Cadenas
📌 Conceptos Generales
Una cadena es un conjunto ordenado de caracteres almacenados en memoria contigua. En C++, las cadenas pueden manejarse como:
- Vectores de caracteres: Similares a los arrays, donde cada elemento es un carácter.
- Objetos de la clase
String: Proporcionan funcionalidades avanzadas y facilidades adicionales.
Características:
- La longitud de una cadena es el número de caracteres que contiene.
- El carácter nulo (
\0) indica el final de la cadena. - Las cadenas pueden ser constantes o variables.
Tipos de cadenas:
- Cadenas de longitud fija: Vectores de longitud predefinida con relleno en blanco si la cadena no ocupa todo el espacio.
- Cadenas de longitud variable: Pueden variar hasta un límite máximo, terminando siempre con
\0. - Cadenas de longitud indefinida: Implementadas mediante estructuras dinámicas como listas enlazadas.
Ejemplo básico:
char cad1[10] = "Hola"; // Longitud fijachar cad2[] = "Mundo"; // Longitud automática🎨 Tratamiento mediante Vectores de Caracteres
1. Declaración e Inicialización
Se utiliza el tipo char para definir cadenas como vectores de caracteres:
Ejemplo:
char cad1[16] = "C++ Avanzado"; // Incluye espacio para \0char cad2[] = "Cadenas"; // Tamaño automáticochar cad3[50] = "Programación"; // Espacio extra disponible2. Acceso a los Elementos
El operador de indexación ([]) permite acceder a cada carácter de la cadena. La indexación comienza en 0, al igual que en cualquier array.
Ejemplo:
char cad[] = "Hola";cout << cad[0]; // Imprime 'H'cad[1] = 'E'; // Modifica a 'HEla'3. Lectura de Cadenas
-
Usando
cin(lee hasta un espacio en blanco):char nombre[50];cin >> nombre; // Lee "Juan" -
Usando
cin.getline(lee hasta un salto de línea):char frase[100];cin.getline(frase, 100); // Lee una línea completa
4. Escritura de Cadenas
Las cadenas pueden imprimirse directamente usando cout:
Ejemplo:
char saludo[] = "¡Hola, mundo!";cout << saludo;5. Asignación de Cadenas
El operador de asignación (=) no puede usarse directamente para copiar cadenas. Se utiliza la función strcpy:
Ejemplo:
#include <cstring>
char origen[] = "C++";char destino[10];strcpy(destino, origen); // Copia "C++" a destino6. Cálculo de Longitud
La función strlen calcula la longitud de una cadena (excluyendo el carácter \0).
Ejemplo:
#include <cstring>
char cad[] = "Hola";cout << "Longitud: " << strlen(cad); // Imprime 47. Comparación de Cadenas
La función strcmp compara dos cadenas lexicográficamente:
- Retorna
0si son iguales. - Un valor negativo si la primera es menor.
- Un valor positivo si la primera es mayor.
Ejemplo
#include <cstring>
char cad1[] = "Hola";char cad2[] = "Mundo";
if (strcmp(cad1, cad2) < 0) { cout << "cad1 es menor que cad2";}8. Concatenación de Cadenas
La función strcat concatena una cadena al final de otra:
Ejemplo
#include <cstring>
char saludo[20] = "Hola";char nombre[] = " Mundo";strcat(saludo, nombre); // Resultado: "Hola Mundo"9. Búsqueda en Cadenas
La función strstr busca una subcadena dentro de otra:
Ejemplo
#include <cstring>
char texto[] = "Aprendiendo C++";char *resultado = strstr(texto, "C++");if (resultado) { cout << "Encontrado: " << resultado;}10. Conversión entre Cadenas y Números
atoi: Convierte una cadena a un entero.atof: Convierte una cadena a un flotante.
Ejemplo
#include <cstdlib>
char numero[] = "123";int valor = atoi(numero);cout << "Entero: " << valor;🛠️ La clase String de C++
La clase String proporciona una forma más cómoda y potente de manejar cadenas en C++.
1. Declaración e Inicialización
Ejemplo:
#include <string>using namespace std;
string mensaje = "Hola, String!";2. Acceso a Elementos
Usando el operador [] o la función miembro at:
Ejemplo:
string saludo = "Hola";saludo[0] = 'h';cout << saludo.at(0); // Imprime 'h'3. Lectura y Escritura
Ejemplo:
string texto;getline(cin, texto); // Lee una línea completacout << texto;4. Operaciones con Strings
-
Asignación:
string a = "Texto";string b = a; // Copia -
Concatenación:
string c = a + b; -
Comparación:
if (a == b) {cout << "Son iguales";} -
Búsqueda:
size_t pos = a.find("Tex"); -
Extracción:
string sub = a.substr(0, 4); -
Intercambio:
a.swap(b);
📚 Ejemplo Completo
Diseñemos un programa que combina vectores de caracteres y objetos String:
#include <iostream>#include <cstring>#include <string>using namespace std;
int main() { char cad1[20] = "Hola"; string cad2 = " Mundo";
// Concatenar usando strcat strcat(cad1, cad2.c_str()); cout << cad1 << endl;
// Operaciones con String string cad3 = " C++"; cad2 += cad3; cout << cad2 << endl;
return 0;}Obtener el tamaño de un string o un array de caracteres
En C++, se pueden obtener los tamaños de un string y de un array de caracteres de maneras diferentes. Aquí te mostramos cómo hacerlo:
1. Tamaño de un string de la librería estándar
Para obtener el tamaño de un objeto string en C++, puedes usar el método .size() o .length() que devuelve el número de caracteres en el string.
Ejemplo con string
#include <iostream>#include <string>
int main() { std::string texto = "Hola Mundo";
// Usando size() o length() para obtener el tamaño std::cout << "El tamaño del string es: " << texto.size() << std::endl;
return 0;}Ambos métodos (.size() y .length()) devuelven el mismo valor: el número de caracteres del string, excluyendo el carácter nulo.
2. Tamaño de un array de caracteres (C-Style String)
En el caso de un array de caracteres (un string estilo C), puedes usar el operador sizeof() para obtener el tamaño total en bytes del array. Sin embargo, si quieres obtener solo la longitud del string (sin contar el carácter nulo \0), puedes usar la función strlen() de la librería <cstring>.
Ejemplo con un array de caracteres
#include <iostream>#include <cstring>
int main() { // Array de caracteres char texto[] = "Hola Mundo";
// Usando sizeof para obtener el tamaño total en bytes del array std::cout << "El tamaño total del array es: " << sizeof(texto) << " bytes" << std::endl;
// Usando strlen para obtener el tamaño del string (sin contar el carácter nulo) std::cout << "El tamaño del string es: " << strlen(texto) << " caracteres" << std::endl;
return 0;}Explicación:
sizeof(texto)devuelve el tamaño total del array, incluyendo el carácter nulo ('\0') al final.strlen(texto)devuelve solo la cantidad de caracteres en el string, sin contar el carácter nulo.
Resumen
- Para un
string: Usa.size()o.length()para obtener el número de caracteres. - Para un array de caracteres: Usa
sizeof()para el tamaño total del array ostrlen()para la longitud del string (sin contar el carácter nulo).