Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Ejercicios de Cadenas

Universidad Nacional de Río Negro

Acerca de

La manipulación de cadenas es una de las tareas más comunes y, en C, una de las más propensas a errores. Estos ejercicios están diseñados para construir una base sólida en el manejo de cadenas de caracteres (estilo C, terminadas en nulo), enfocándose en la implementación de algoritmos comunes desde cero. Es crucial que al resolverlos, se apliquen los principios de manejo de “cadenas seguras” (Regla 0x5003h: Utilizá guardas de inclusión en todos los archivos de cabecera), pasando siempre la capacidad del búfer para evitar desbordamientos.

Para profundizar en los conceptos teóricos, podés consultar el siguiente capítulo del apunte:

Análisis de Cadenas

Ejercicio 11.1 - b.1 - Contar vocales ⭐⭐☆☆☆

Descripción

Escribir una función que cuente el número total de vocales (a, e, i, o, u) en una cadena de texto. La función no debe distinguir entre mayúsculas y minúsculas.

Ejercicio 11.2 - b.2 - Contabilizador de caracteres ⭐⭐☆☆☆

Descripción

Implementar una función que calcule la frecuencia de aparición de cada carácter dentro de una cadena y muestre el resultado para aquellos caracteres que aparecen al menos una vez.

Ejercicio 11.3 - b.3 - ¿Es un número válido? ⭐⭐☆☆☆

Descripción

Desarrollar una función que verifique si una cadena de texto representa un número de punto flotante válido. La validación debe seguir un conjunto de reglas específicas.

Ejercicio 11.4 - b.4 - ¿Es alfabética? ⭐⭐☆☆☆

Descripción

Crear una función que determine si una cadena contiene únicamente caracteres alfabéticos (de la ‘a’ a la ‘z’, mayúsculas o minúsculas).

Propiedades de Cadenas

Ejercicio 11.5 - b.5 - Palíndromo ⭐⭐☆☆☆

Descripción

Implementar una función que verifique si una cadena es un palíndromo, es decir, si se lee igual de izquierda a derecha que de derecha a izquierda. La verificación debe ignorar espacios en blanco y no debe ser sensible a mayúsculas/minúsculas.

Ejercicio 11.6 - b.6 - Anagrama ⭐⭐☆☆☆

Descripción

Escribir una función que determine si una cadena es un anagrama de otra (es decir, si ambas tienen los mismos caracteres con la misma frecuencia), ignorando mayúsculas/minúsculas y espacios.

Ejercicio 11.7 - b.7 - Pangrama ⭐⭐☆☆☆

Descripción

Verificar si una cadena es un pangrama, es decir, si contiene todas las letras del alfabeto inglés al menos una vez. La verificación debe ser insensible a mayúsculas/minúsculas.

Manipulación y Transformación

Ejercicio 11.8 - b.8 - Tokenización ⭐⭐☆☆☆

Descripción

Dividir una cadena en una secuencia de “tokens” (subcadenas) basándose en un carácter delimitador. La función strtok de C es un ejemplo clásico de esto.

Ejercicio 11.9 - b.9 - Compresión RLE (Run-Length Encoding) ⭐⭐☆☆☆

Descripción

Implementar una forma simple de compresión de cadenas llamada Run-Length Encoding. Esta técnica compacta una cadena reemplazando secuencias de caracteres idénticos por el número de repeticiones seguido del carácter.

Ejercicio 11.10 - b.10 - Desduplicador ⭐⭐☆☆☆

Descripción

Escribir una función que elimine los caracteres duplicados de una cadena, conservando únicamente la primera aparición de cada carácter. La modificación puede ser in-place.

Ejercicio 11.11 - b.11 - Número a cadena con formato ⭐⭐⭐☆☆

Descripción

Transformar un número entero largo en una cadena de texto, insertando separadores de miles (puntos o comas) para mejorar la legibilidad.

Ejercicio 11.12 - b.12 - Búsqueda de subcadena ⭐⭐⭐☆☆

Descripción

Implementar una función que busque la primera ocurrencia de una subcadena (needle o aguja) dentro de una cadena principal (haystack o pajar). Es una reimplementación de la función strstr.

Conversión de Base Numérica

Ejercicio 11.13 - b.13 - Binario a decimal ⭐⭐⭐⭐☆

Descripción

Convertir una cadena que representa un número en formato binario (compuesta de '0’s y '1’s) a su valor entero decimal correspondiente.

Ejercicio 11.14 - b.14 - Hexadecimal a decimal ⭐⭐☆☆☆

Descripción

Convertir una cadena que representa un número en formato hexadecimal (dígitos 0-9 y letras A-F, insensibles a mayúsculas) a su valor entero decimal.

Ejercicio 11.15 - b.15 - Decimal a binario ⭐⭐⭐⭐☆

Descripción

Convertir un número entero decimal a su representación en una cadena de texto binaria.

Ejercicio 11.16 - b.16 - Decimal a hexadecimal ⭐⭐☆☆☆

Descripción

Convertir un número entero decimal a su representación en una cadena de texto hexadecimal.

Más Ejercicios de Cadenas

Ejercicio 11.17 - b.17 - Invertir palabras en una frase ⭐⭐☆☆☆

Descripción

Escribir una función que tome una frase y la modifique de tal manera que cada palabra individual quede invertida, pero el orden de las palabras en la frase se mantenga intacto.

Ejercicio 11.18 - b.18 - Invertir orden de las palabras ⭐⭐☆☆☆

Descripción

Escribir una función que invierta el orden de las palabras en una frase. Por ejemplo, “Hola Mundo desde C” se convertiría en “C desde Mundo Hola”.

Ejercicio 11.19 - b.19 - Capitalización (Title Case) ⭐⭐⭐⭐☆

Descripción

Implementar una función que convierta una cadena a “Title Case”, donde la primera letra de cada palabra está en mayúscula y el resto de las letras de la palabra están en minúscula.

Ejercicio 11.20 - b.20 - Contar palabras ⭐⭐☆☆☆

Descripción

Desarrollar una función que cuente el número de palabras en una cadena. Se puede considerar que las palabras están separadas por uno o más espacios.

Ejercicio 11.21 - b.21 - Eliminar espacios extra ⭐⭐☆☆☆

Descripción

Crear una función que elimine los espacios en blanco redundantes de una cadena: espacios al principio, al final y múltiples espacios entre palabras, dejando solo un espacio entre cada palabra.

Ejercicio 11.22 - b.22 - Recorte de cadena (Trim) ⭐⭐⭐☆☆

Descripción

Implementar una función trim que modifique una cadena para eliminar todos los espacios en blanco (o cualquier otro carácter de espaciado como tabuladores o saltos de línea) que se encuentren al principio y al final de la misma.

Ejercicio 11.23 - b.23 - Reemplazar subcadena ⭐⭐⭐☆☆

Descripción

Escribir una función que reemplace todas las ocurrencias de una subcadena por otra dentro de una cadena principal. La función debe manejar cambios en la longitud de la cadena, lo que usualmente requiere memoria dinámica.

Ejercicio 11.24 - b.24 - Validación de email (Simple) ⭐☆☆☆☆

Descripción

Crear una función que verifique si una cadena tiene un formato de correo electrónico básico. No busca ser exhaustiva (lo cual es muy complejo), sino validar una estructura mínima.

Ejercicio 11.25 - b.25 - Cifrado César ⭐⭐☆☆☆

Descripción

Implementar el Cifrado César, un tipo de cifrado por sustitución en el que cada letra en el texto original es reemplazada por una letra un número fijo de posiciones más adelante en el alfabeto, de forma circular.

Ejercicio 11.26 - b.26 - Descifrado César ⭐⭐☆☆☆

Descripción

Escribir la función complementaria que descifre un mensaje cifrado con el Cifrado César, conociendo el desplazamiento. Es la operación inversa al ejercicio anterior.

Ejercicio 11.27 - b.27 - Encontrar el carácter más frecuente ⭐⭐☆☆☆

Descripción

Desarrollar una función que encuentre y devuelva el carácter que aparece con más frecuencia en una cadena. Si hay empates, puede devolver cualquiera de los más frecuentes.

Ejercicio 11.28 - b.28 - Comparación de cadenas (Ignorando mayúsculas) ⭐⭐⭐☆☆

Descripción

Implementar su propia versión de la función strcasecmp, que compara dos cadenas sin diferenciar entre mayúsculas y minúsculas.

Ejercicio 11.29 - b.29 - Extraer subcadena ⭐⭐⭐☆☆

Descripción

Crear una función que extraiga una porción de una cadena. La función debe recibir la cadena original, una posición de inicio y una longitud, y devolver una nueva cadena con la subcadena extraída.

Ejercicio 11.30 - b.30 - Justificar texto (Simple) ⭐☆☆☆☆

Descripción

Implementar una función que justifique una línea de texto a un ancho específico, insertando espacios adicionales entre las palabras de la manera más uniforme posible.

Ejercicio 11.31 - b.31 - Acrónimo ⭐⭐☆☆☆

Descripción

Escribir una función que genere un acrónimo a partir de una frase, tomando la primera letra de cada palabra.

Cadenas y Algoritmos

Ejercicio 11.32 - b.32 - Distancia de Hamming ⭐⭐☆☆☆

Descripción

Implementar una función que calcule la distancia de Hamming entre dos cadenas de igual longitud. Esta distancia es el número de posiciones en las que los caracteres correspondientes son diferentes.

Ejercicio 11.33 - b.33 - Subsecuencia común más larga (LCS) ⭐⭐☆☆☆

Descripción

Escribir una función que encuentre la longitud de la subsecuencia común más larga (LCS) entre dos cadenas. Una subsecuencia no tiene por qué ser contigua.

Ejercicio 11.34 - b.34 - Validación de IP simple ⭐☆☆☆☆

Descripción

Crear una función que verifique si una cadena representa una dirección IPv4 válida. Debe consistir en cuatro números entre 0 y 255, separados por puntos.

Ejercicio 11.35 - b.35 - Convertir a snake_case ⭐⭐☆☆☆

Descripción

Implementar una función que convierta una cadena en camelCase o PascalCase a snake_case. Esto implica insertar un guion bajo antes de cada letra mayúscula y convertir toda la cadena a minúsculas.

Ejercicio 11.36 - b.36 - Convertir a camelCase ⭐⭐☆☆☆

Descripción

Implementar una función que convierta una cadena en snake_case a camelCase. Esto implica eliminar los guiones bajos y poner en mayúscula la letra que les seguía.

Ejercicio 11.37 - b.37 - Rotación de cadena ⭐⭐⭐☆☆

Descripción

Escribir una función que determine si una cadena s2 es una rotación de otra cadena s1.

Ejercicio 11.38 - b.38 - Eliminar comentarios ⭐⭐☆☆☆

Descripción

Crear una función que reciba una cadena (que puede representar una o más líneas de código) y elimine los comentarios de estilo C (//... hasta el final de la línea y /*...*/ incluyendo el contenido).

Ejercicio 11.39 - b.39 - Análisis de URL simple ⭐☆☆☆☆

Descripción

Dada una URL en formato de cadena, escribir una función que la analice y extraiga sus componentes principales: protocolo, host y ruta.

Ejercicio 11.40 - b.40 - Generador de “Slugs” ⭐⭐☆☆☆

Descripción

Un “slug” es una versión de una cadena amigable para URLs. Escribir una función que convierta un título en un slug: debe estar en minúsculas, los espacios deben ser reemplazados por guiones y se deben eliminar todos los caracteres no alfanuméricos.

Ejercicio 11.41 - b.41 - Primer carácter no repetido ⭐⭐☆☆☆

Descripción

Implementar una función que encuentre y devuelva el primer carácter en una cadena que no se repite en el resto de la cadena.