Inverter uma String Usando Ponteiros

CBeginner
Pratique Agora

Introdução

Os ponteiros fornecem acesso direto à memória e, ao usar ponteiros, podemos acessar e manipular os valores e endereços de variáveis e arrays na memória. O programa que construiremos neste laboratório usará variáveis ponteiro para inverter uma string fornecida.

Nota: Você precisa criar o arquivo ~/project/main.c por conta própria para praticar a codificação e aprender como compilar e executá-lo usando gcc.

cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main

Declarar variáveis de string

Começaremos declarando dois arrays de caracteres (char arrays): um para a string original e outro para a string invertida.

char str[100];
char rev[100];

Declarar variáveis ponteiro

Agora, declararemos duas variáveis ponteiro: uma para apontar para o primeiro elemento da string 'str' e a outra para apontar para o primeiro elemento da string invertida 'rev'.

char *sptr = str;
char *rptr = rev;

Obter entrada do usuário

Pediremos ao usuário que insira uma string que ele deseja inverter, usando a função scanf:

printf("Enter a string: ");
scanf("%s", str);

Encontrar o fim da string

Precisamos encontrar o fim da string para que possamos começar a percorrê-la em ordem inversa. Usaremos um loop while para incrementar sptr até que ele aponte para o caractere nulo no final da string.

while(*sptr)
{
   sptr++;
}

Inverter a string

Agora, usaremos um loop while para percorrer a string str em ordem inversa. Decrementaremos sptr para mover do caractere nulo para o último caractere da string e, para cada elemento na string, armazenaremos o valor na string invertida rev usando o operador *.

while(sptr >= str)
{
   *rptr = *sptr;
   rptr++;
   sptr--;
}

Adicionar caractere nulo ao final da string invertida

O final da string invertida foi alcançado. Devemos adicionar o caractere nulo ao final da string invertida:

*rptr = '\0';

Copiar a string invertida para a string original

Agora, copiaremos a string invertida para a string original.

strcpy(str, rev);

Imprimir a string invertida

Finalmente, imprimiremos a string invertida.

printf("Reversed string: %s\n", str);

Resumo

Neste laboratório, aprendemos como usar variáveis ponteiro (pointer variables) para inverter uma string fornecida. Ponteiros fornecem acesso direto à memória e, usando-os, podemos acessar e manipular os valores e endereços de variáveis e arrays na memória. Usamos um loop while para percorrer a string em ordem inversa, armazenamos a string invertida em um novo array de caracteres e adicionamos um caractere nulo ao final da string invertida. Finalmente, copiamos a string invertida para a string original e a imprimimos.