Revisão: Concatenação Dinâmica de Strings
Parte da seção Lógica e Fluxo 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 criar um utilitário de processamento de texto. Seu programa deve:
- Escrever uma função chamada
concatenateStringsque:- Recebe dois parâmetros
char*chamadosstr1estr2 - Retorna um
char*apontando para uma string alocada dinamicamente - Calcula a memória total necessária para ambas as strings mais o terminador nulo
- Usa
malloc()para alocar a quantidade exata de memória necessária - Verifica se a alocação de memória foi bem-sucedida (retorna NULL se a alocação falhar)
- Usa
strcpy()para copiar a primeira string para a memória alocada - Usa
strcat()para anexar a segunda string ao resultado - Retorna o ponteiro para a string concatenada recém-criada
- Recebe dois parâmetros
- Escrever uma função chamada
processTextque:- Recebe três parâmetros
char*:word1,word2eseparator - Retorna um
char*apontando para uma string alocada dinamicamente - Cria uma string combinada no formato: word1 + separator + word2
- Primeiro chama
concatenateStringspara combinarword1eseparator - Em seguida, chama
concatenateStringsnovamente para anexarword2ao resultado - Libera corretamente quaisquer alocações de memória intermediárias
- Retorna o resultado final da concatenação
- Recebe três parâmetros
- Na função main:
- Declara três arrays de caracteres de tamanho 50 cada:
firstWord,secondWordeconnector - Lê três strings da entrada, representando a primeira palavra, a segunda palavra e o conector
- Chama a função
processTextcom essas três strings - Verifica se o ponteiro retornado não é NULL
- Se for bem-sucedido, imprime o resultado neste formato exato:
Result: [concatenated_string] - Se a alocação de memória falhar, imprime:
Memory allocation failed - Calcula e imprime o comprimento da string resultante neste formato exato:
Length: [length] - Libera a memória alocada dinamicamente
- Declara três arrays de caracteres de tamanho 50 cada:
Este desafio testa seu domínio da alocação dinâmica de memória, das funções de manipulação de strings, dos valores de retorno de ponteiros e do gerenciamento adequado de memória. Você praticará o cálculo dos requisitos de memória, o uso de malloc() e free(), o trabalho com várias funções de string e o tratamento de falhas na alocação de memória. O desafio demonstra como a alocação dinâmica permite que funções criem e retornem dados que persistem além do escopo delas.
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() {
// Leia a 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 Lógica e Fluxo
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 ContatoPratique por conta própria: Compilador de C online