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.hLa 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
