Repaso: Concatenación dinámica de strings
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 61 de 63.
Desafío
FácilCrea un programa en C que implemente una función de concatenación de cadenas dinámica para construir una utilidad de procesamiento de texto. Tu programa debe:
- Escribir una función llamada
concatenateStringsque:- Reciba dos parámetros
char*llamadosstr1ystr2 - Devuelva un
char*que apunte a una cadena asignada dinámicamente - Calcule la memoria total necesaria para ambas cadenas más el terminador nulo
- Use
malloc()para asignar la cantidad exacta de memoria requerida - Verifique si la asignación de memoria fue exitosa (devuelve NULL si la asignación falla)
- Use
strcpy()para copiar la primera cadena en la memoria asignada - Use
strcat()para añadir la segunda cadena al resultado - Devuelva el puntero a la cadena concatenada recién creada
- Reciba dos parámetros
- Escribir una función llamada
processTextque:- Reciba tres parámetros
char*:word1,word2yseparator - Devuelva un
char*que apunte a una cadena asignada dinámicamente - Cree una cadena combinada con el formato: word1 + separator + word2
- Primero llame a
concatenateStringspara combinarword1yseparator - Luego llame a
concatenateStringsnuevamente para añadirword2al resultado - Libere adecuadamente cualquier asignación de memoria intermedia
- Devuelva el resultado concatenado final
- Reciba tres parámetros
- En la función main:
- Declare tres arreglos de caracteres de tamaño 50 cada uno:
firstWord,secondWordyconnector - Lea tres cadenas de la entrada que representen la primera palabra, la segunda palabra y el conector
- Llame a la función
processTextcon estas tres cadenas - Verifique si el puntero devuelto no es NULL
- Si tiene éxito, imprima el resultado en este formato exacto:
Result: [concatenated_string] - Si la asignación de memoria falló, imprima:
Memory allocation failed - Calcule e imprima la longitud de la cadena resultante en este formato exacto:
Length: [length] - Libere la memoria asignada dinámicamente
- Declare tres arreglos de caracteres de tamaño 50 cada uno:
Este desafío pone a prueba tu dominio de la asignación dinámica de memoria, las funciones de manipulación de cadenas, los valores de retorno de punteros y la gestión adecuada de la memoria. Practicarás el cálculo de requisitos de memoria, el uso de malloc() y free(), el trabajo con múltiples funciones de cadena y el manejo de fallos en la asignación de memoria. El desafío demuestra cómo la asignación dinámica permite que las funciones creen y devuelvan datos que persisten más allá de su ámbito.
Pruébalo tú mismo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Escribe tu función concatenateStrings aquí
// TODO: Escribe tu función processText aquí
int main() {
// Leer entrada
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// TODO: Escribe tu código a continuación
// Llama a la función processText y maneja el resultado
return 0;
}Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones8Estructuras y Punteros
Punteros a estructurasEl operador flecha (->)Pasar estructuras por valorPasar punteros a estructurasAsignación dinámica de estructurasResumen: Modificar estructuras - Ptr11Desafíos de repaso final
Repaso: Concatenación dinámica de stringsRepaso: Array de structsRepaso: Contador de frecuencia de palabras3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas