En este tema, aprenderemos sobre el manejo de cadenas en C. Las cadenas son secuencias de caracteres terminadas en un carácter nulo ('\0'
). A lo largo de esta sección, cubriremos cómo declarar, inicializar y manipular cadenas utilizando funciones estándar de la biblioteca de C.
Contenido
- Declaración e Inicialización de Cadenas
- Funciones de la Biblioteca
string.h
- Ejemplos Prácticos
- Ejercicios
- Declaración e Inicialización de Cadenas
Declaración de Cadenas
En C, una cadena se puede declarar de varias maneras. Aquí hay algunos ejemplos:
char str1[10]; // Declara una cadena de 10 caracteres char str2[] = "Hola"; // Inicializa una cadena con "Hola" char *str3 = "Mundo"; // Apunta a una cadena constante "Mundo"
Inicialización de Cadenas
Las cadenas se pueden inicializar de diferentes maneras:
char str1[10] = "Hola"; // Inicializa con "Hola" y rellena el resto con '\0' char str2[] = {'H', 'o', 'l', 'a', '\0'}; // Inicializa con un array de caracteres
- Funciones de la Biblioteca
string.h
string.h
La biblioteca string.h
proporciona varias funciones útiles para manipular cadenas. Aquí hay algunas de las más comunes:
Función | Descripción |
---|---|
strlen(str) |
Devuelve la longitud de la cadena str |
strcpy(dest, src) |
Copia la cadena src a dest |
strncpy(dest, src, n) |
Copia los primeros n caracteres de src a dest |
strcat(dest, src) |
Concatena src al final de dest |
strncat(dest, src, n) |
Concatena los primeros n caracteres de src a dest |
strcmp(str1, str2) |
Compara str1 y str2 |
strncmp(str1, str2, n) |
Compara los primeros n caracteres de str1 y str2 |
strchr(str, c) |
Devuelve un puntero a la primera ocurrencia de c en str |
strstr(haystack, needle) |
Devuelve un puntero a la primera ocurrencia de needle en haystack |
Ejemplos de Uso
strlen
#include <stdio.h> #include <string.h> int main() { char str[] = "Hola Mundo"; printf("La longitud de la cadena es: %lu\n", strlen(str)); return 0; }
strcpy
#include <stdio.h> #include <string.h> int main() { char src[] = "Hola"; char dest[10]; strcpy(dest, src); printf("La cadena copiada es: %s\n", dest); return 0; }
strcat
#include <stdio.h> #include <string.h> int main() { char dest[20] = "Hola"; char src[] = " Mundo"; strcat(dest, src); printf("La cadena concatenada es: %s\n", dest); return 0; }
strcmp
#include <stdio.h> #include <string.h> int main() { char str1[] = "Hola"; char str2[] = "Mundo"; if (strcmp(str1, str2) == 0) { printf("Las cadenas son iguales\n"); } else { printf("Las cadenas son diferentes\n"); } return 0; }
- Ejemplos Prácticos
Ejemplo 1: Contar Vocales en una Cadena
#include <stdio.h> #include <string.h> int contar_vocales(char *str) { int count = 0; for (int i = 0; i < strlen(str); i++) { if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u' || str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U') { count++; } } return count; } int main() { char str[] = "Hola Mundo"; printf("El número de vocales en '%s' es: %d\n", str, contar_vocales(str)); return 0; }
Ejemplo 2: Invertir una Cadena
#include <stdio.h> #include <string.h> void invertir_cadena(char *str) { int n = strlen(str); for (int i = 0; i < n / 2; i++) { char temp = str[i]; str[i] = str[n - i - 1]; str[n - i - 1] = temp; } } int main() { char str[] = "Hola Mundo"; invertir_cadena(str); printf("La cadena invertida es: %s\n", str); return 0; }
- Ejercicios
Ejercicio 1: Contar Palabras en una Cadena
Descripción: Escribe una función que cuente el número de palabras en una cadena. Una palabra se define como una secuencia de caracteres separados por espacios.
Solución:
#include <stdio.h> #include <string.h> #include <ctype.h> int contar_palabras(char *str) { int count = 0; int in_word = 0; for (int i = 0; i < strlen(str); i++) { if (isspace(str[i])) { in_word = 0; } else if (!in_word) { in_word = 1; count++; } } return count; } int main() { char str[] = "Hola Mundo, esto es un ejemplo"; printf("El número de palabras en '%s' es: %d\n", str, contar_palabras(str)); return 0; }
Ejercicio 2: Reemplazar Caracteres en una Cadena
Descripción: Escribe una función que reemplace todas las ocurrencias de un carácter en una cadena con otro carácter.
Solución:
#include <stdio.h> #include <string.h> void reemplazar_caracter(char *str, char old_char, char new_char) { for (int i = 0; i < strlen(str); i++) { if (str[i] == old_char) { str[i] = new_char; } } } int main() { char str[] = "Hola Mundo"; reemplazar_caracter(str, 'o', 'a'); printf("La cadena modificada es: %s\n", str); return 0; }
Conclusión
En esta sección, hemos aprendido cómo manejar cadenas en C, incluyendo su declaración, inicialización y manipulación utilizando funciones de la biblioteca string.h
. También hemos visto ejemplos prácticos y ejercicios para reforzar los conceptos aprendidos. Con esta base, estarás preparado para trabajar con cadenas en tus programas en C y abordar problemas más complejos relacionados con el manejo de texto.
Curso de Programación en C
Módulo 1: Introducción a C
- Introducción a la Programación
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
Módulo 2: Tipos de Datos y Variables
Módulo 3: Flujo de Control
Módulo 4: Funciones
- Introducción a las Funciones
- Argumentos de Función y Valores de Retorno
- Ámbito y Vida de las Variables
- Funciones Recursivas
Módulo 5: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Funciones de Arreglos y Cadenas
Módulo 6: Punteros
Módulo 7: Estructuras y Uniones
Módulo 8: Asignación Dinámica de Memoria
Módulo 9: Manejo de Archivos
- Introducción al Manejo de Archivos
- Lectura y Escritura de Archivos
- Posicionamiento de Archivos
- Manejo de Errores en Operaciones de Archivos
Módulo 10: Temas Avanzados
- Directivas del Preprocesador
- Argumentos de Línea de Comandos
- Listas de Argumentos Variables
- Multihilo en C
Módulo 11: Mejores Prácticas y Optimización
- Legibilidad del Código y Documentación
- Técnicas de Depuración
- Optimización del Rendimiento
- Consideraciones de Seguridad