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.
Desafio
FácilCrie 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:
- Escrever uma função chamada
concatenateStringsque:- Receba dois parâmetros
char*chamadosstr1estr2 - 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
- Receba dois parâmetros
- Escrever uma função chamada
processTextque:- Receba três parâmetros
char*:word1,word2eseparator - Retorne um
char*apontando para uma string alocada dinamicamente - Crie uma string combinada no formato: word1 + separator + word2
- Primeiro chame
concatenateStringspara combinarword1eseparator - Depois chame
concatenateStringsnovamente para anexarword2ao resultado - Libere adequadamente qualquer alocação de memória intermediária
- Retorne o resultado concatenado final
- Receba três parâmetros
- Na função main:
- Declare três arrays de caracteres de tamanho 50 cada:
firstWord,secondWordeconnector - Leia três strings da entrada representando a primeira palavra, a segunda palavra e o conector
- Chame a função
processTextcom 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
- Declare três arrays de caracteres de tamanho 50 cada:
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
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos8Structs e Ponteiros
Ponteiros para StructsO Operador Seta (->)Passagem de Structs por ValorPassagem de Ponteiros para StructsAlocação Dinâmica de StructsRecapitulação: Modificando Struct - Ptr11Desafios de Revisão Final
Revisão: Concatenação Dinâmica de StringsRevisão: Array de StructsRevisão: Contador de Frequência de Palavras3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato