Menu
Coddy logo textTech

Revisão: Concatenação Dinâmica de Strings

Parte da seção Logic & Flow do Journey de C da Coddy — lição 61 de 63.

challenge icon

Desafio

Fácil

Crie um programa em C que implemente uma função de concatenação dinâmica de strings para construir um utilitário de processamento de texto. Seu programa deve:

  1. Escrever uma função chamada concatenateStrings que:
    • Receba dois parâmetros char* chamados str1 e str2
    • Retorne um char* apontando para uma string alocada dinamicamente
    • Calcule a memória total necessária para ambas as strings mais o terminador nulo
    • Use malloc() para alocar a quantidade exata de memória necessária
    • Verifique se a alocação de memória foi bem-sucedida (retorna NULL se a alocação falhar)
    • Use strcpy() para copiar a primeira string para a memória alocada
    • Use strcat() para anexar a segunda string ao resultado
    • Retorne o ponteiro para a string concatenada recém-criada
  2. Escrever uma função chamada processText que:
    • Receba três parâmetros char*: word1, word2 e separator
    • Retorne um char* apontando para uma string alocada dinamicamente
    • Crie uma string combinada no formato: word1 + separator + word2
    • Primeiro chame concatenateStrings para combinar word1 e separator
    • Depois chame concatenateStrings novamente para anexar word2 ao resultado
    • Libere adequadamente qualquer alocação de memória intermediária
    • Retorne o resultado concatenado final
  3. Na função main:
    • Declare três arrays de caracteres de tamanho 50 cada: firstWord, secondWord e connector
    • Leia três strings da entrada representando a primeira palavra, a segunda palavra e o conector
    • Chame a função processText com essas três strings
    • Verifique se o ponteiro retornado não é NULL
    • Se for bem-sucedido, imprima o resultado neste formato exato: Result: [concatenated_string]
    • Se a alocação de memória falhar, imprima: Memory allocation failed
    • Calcule e imprima o comprimento da string de resultado neste formato exato: Length: [length]
    • Libere a memória alocada dinamicamente

Este desafio testa seu domínio de alocação dinâmica de memória, funções de manipulação de strings, valores de retorno de ponteiros e gerenciamento adequado de memória. Você praticará o cálculo de requisitos de memória, o uso de malloc() e free(), o trabalho com múltiplas funções de string e o tratamento de falhas de alocação de memória. O desafio demonstra como a alocação dinâmica permite que as funções criem e retornem dados que persistem além de seu escopo.

Experimente você mesmo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: Escreva sua função concatenateStrings aqui

// TODO: Escreva sua função processText aqui

int main() {
    // Ler entrada
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: Escreva seu código abaixo
    // Chame a função processText e trate o resultado
    
    return 0;
}

Todas as lições de Logic & Flow