Usando strcat()
Parte da seção Logic & Flow do Journey de C da Coddy — lição 17 de 63.
Você aprendeu como copiar strings com strcpy(), mas e se você quiser juntar duas strings? Isso é chamado de concatenação, e a linguagem C fornece a função strcat() da biblioteca <string.h> para esse propósito.
A função strcat() anexa o conteúdo de uma string ao final de outra string. Ela recebe dois argumentos: a string de destino (que será modificada) e a string de origem (que será adicionada ao final).
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting agora contém "Hello World"É crucial que sua string de destino tenha espaço suficiente para conter tanto o conteúdo original quanto o novo conteúdo que está sendo anexado. A função strcat() encontra o terminador nulo na string de destino, remove-o, copia a string de origem para esse local e adiciona um novo terminador nulo no final.
Às vezes você precisa concatenar um número (como um int) a uma string. Como strcat() funciona apenas com arrays de caracteres, primeiro você precisa converter o número em uma string. Você pode fazer isso com sprintf(), que funciona exatamente como printf(), mas escreve o resultado formatado em um array de caracteres em vez de imprimi-lo na tela. sprintf() faz parte de <stdio.h>, que já está incluído na maioria dos programas em C.
int n = 42;
char numStr[20];
sprintf(numStr, "%d", n); // numStr agora contém "42" como uma stringAssim que o número estiver armazenado como uma string em numStr, você pode usar strcat() para anexá-lo a outra string como de costume:
char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr); // summary agora contém "Total people processed: 3"Esta função é essencial para construir strings mais longas a partir de pedaços menores, como criar frases completas a partir de palavras individuais ou combinar a entrada do usuário com texto predefinido.
Desafio
FácilEscreva um programa em C que demonstre a concatenação de strings usando a função strcat() para construir mensagens personalizadas. Seu programa deve:
- Ler um número inteiro
nrepresentando a quantidade de pessoas a serem processadas - Para cada pessoa:
- Ler o primeiro nome da entrada
- Ler o sobrenome da entrada
- Criar um array de caracteres chamado
fullNamecom 100 elementos - Usar
strcpy()para copiar o primeiro nome parafullName - Usar
strcat()para anexar um único espaço " " afullName - Usar
strcat()para anexar o sobrenome afullName - Criar um array de caracteres chamado
greetingcom 150 elementos - Usar
strcpy()para copiar "Hello, " paragreeting - Usar
strcat()para anexar ofullNameagreeting - Usar
strcat()para anexar "! Welcome to our program." agreeting - Imprimir a mensagem de saudação final
- Após processar todas as pessoas, criar uma mensagem de resumo:
- Criar um array de caracteres chamado
summarycom 100 elementos - Usar
strcpy()para copiar "Total people processed: " parasummary - Converter o número
npara uma string e usarstrcat()para anexá-lo asummary - Imprimir a mensagem de resumo
- Criar um array de caracteres chamado
Lembre-se de incluir o cabeçalho <string.h> para usar as funções de string.
Sua saída deve exibir os resultados no seguinte formato:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]Por exemplo, se a entrada for:
2
John
Doe
Alice
SmithSua saída deve ser:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2Este desafio testa sua compreensão do uso de strcat() para concatenar várias strings, combinando-o com strcpy() para a configuração inicial da string e construindo strings complexas a partir de múltiplos componentes passo a passo.
Experimente você mesmo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// Leia o número de pessoas
int n;
scanf("%d", &n);
// TODO: Escreva seu código abaixo
// Processe cada pessoa e crie mensagens de saudação
// Em seguida, crie e exiba a mensagem de resumo
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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 Argumentos3Arrays 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