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 ao final.
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.
Às vezes você precisa converter um número em uma string antes de poder concatená-lo. Para isso, você pode usar sprintf() de <stdio.h> (que já está incluído na maioria dos programas C). sprintf() funciona exatamente como printf(), mas em vez de imprimir na tela, ele escreve o resultado formatado em um array de caracteres (char array).
Por exemplo, para converter um inteiro em uma string:
int age = 25;
char ageStr[10];
sprintf(ageStr, "%d", age); // ageStr agora contém "25"
char result[30] = "Age: ";
strcat(result, ageStr); // result agora contém "Age: 25"O primeiro argumento para
sprintf() é o array de caracteres de destino, o segundo é a string de formato (usando os mesmos especificadores de formato que printf()), e os argumentos restantes são os valores a serem inseridos.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 (first name) da entrada
- Ler o sobrenome (last name) 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 " " aofullName - Usar
strcat()para anexar o sobrenome aofullName - Criar um array de caracteres chamado
greetingcom 150 elementos - Usar
strcpy()para copiar "Hello, " paragreeting - Usar
strcat()para anexar ofullNameaogreeting - Usar
strcat()para anexar "! Welcome to our program." aogreeting - 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 aosummary - 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.
Folha de consulta
A função strcat() de <string.h> concatena (une) duas strings anexando a string de origem ao final da string de destino.
Sintaxe: strcat(destination, source)
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting agora contém "Hello World"Importante: A string de destino deve ter espaço suficiente para conter tanto o conteúdo original quanto o conteúdo anexado. A função encontra o terminador nulo no destino, remove-o, copia a string de origem para esse local e adiciona um novo terminador nulo ao final.
A função sprintf() de <stdio.h> funciona como printf(), mas escreve o resultado formatado em um array de caracteres (string) em vez de imprimi-lo. Isso a torna útil para converter inteiros (ou outros valores) em strings.
Sintaxe: sprintf(destination, format, value)
#include <stdio.h>
int num = 42;
char numStr[10];
sprintf(numStr, "%d", num); // numStr agora contém "42"Importante: O array de destino deve ser grande o suficiente para conter a string resultante, incluindo o terminador nulo.
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