Reordene o código abaixo (incluindo abre/fecha chaves, quando necessárias) para que, ao ler uma string de até 20 caracteres, o algoritmo resultante calcule o reverso dessa string. Exemplo: abc se torne cba. IMPORTANTE! A função fgets adiciona automaticamente o caractere \n ao final de uma string, quando faz a leitura.
código deve tratar isso, substituindo esse caractere por
.
return 0;
printf(str2 = %s\n, str2);
for(i=strlen(str)-1;i>=0;i–) {
char str[20], str2[20];
str2[j] = \0;
str[strlen(str)-1] = \0;
fgets(str, sizeof(str), stdin);
#include<string.h>
j++;
str2[j] = str[i];
#include<stdio.h>
int i, j=0;
int main(){
return 0;
printf(str2 = %s\n, str2);
for(i=strlen(str)-1;i>=0;i–) {
char str[20], str2[20];
str2[j] = \0;
str[strlen(str)-1] = \0;
fgets(str, sizeof(str), stdin);
#include<string.h>
j++;
str2[j] = str[i];
#include<stdio.h>
int i, j=0;
int main(){
Passo 1
Beleza, o exercício pede pra gente montar um programinha em C que lê uma string de até 20 caracteres, troca o
\n
que o fgets
coloca no final por \0
(o terminador de string em C) e depois gera outra string que é o reverso da primeira. O conteúdo aqui é: bibliotecas padrão (<stdio.h>
e <string.h>
), uso de fgets
, função strlen
, laço for
e manipulação de arrays de char
.Passo 2
Primeiro a gente inclui as bibliotecas e declara a função principal
main
, além das variáveis que vamos usar:#include <stdio.h>
#include <string.h>
int main() {
char str[20], str2[20];
int i, j = 0;
Explicando:
<stdio.h>
é parafgets
eprintf
.<string.h>
é para usarstrlen
.str
vai guardar o texto que o usuário digita.str2
vai receber o reverso.i
é nosso índice de leitura destr
de trás pra frente,j
é o índice de escrita emstr2
.
Passo 3
Agora a gente lê a linha do usuário com
fgets
: fgets(str, sizeof(str), stdin);
Detalhe importante:
fgets
sempre copia o \n
quando a entrada cabe no buffer, então a gente precisa retirar esse \n
antes de inverter a string.Passo 4
Para remover o
\n
, a gente faz: str[strlen(str) - 1] = '\0';
Por quê?
strlen(str)
dá o número de caracteres até o terminador \0
, mas como ainda há o \n
antes desse \0
, strlen(str)-1
aponta para o \n
. Substituindo por '\0'
, a string fica certinha sem o salto de linha.Passo 5
Agora vamos inverter a string. A ideia é percorrer
str
de trás pra frente (índice i
vai de strlen(str)-1
até 0
) e, a cada passo, copiar str[i]
para str2[j]
, incrementando j
. Ficaria assim: for (i = strlen(str) - 1; i >= 0; i--) {
str2[j] = str[i];
j++;
}
Teoria do
for
: a gente inicia em i = tamanho-1
, verifica i >= 0
, executa o corpo, faz i--
e repete. Isso garante que o primeiro caractere colocado em str2
seja o último de str
, e assim por diante.Passo 6
Depois do laço,
j
está posicionado logo após o último caractere válido em str2
. A gente precisa colocar o terminador de string lá: str2[j] = '\0';
Passo 7
Por fim, imprime o resultado e encerra o
main
: printf("str2 = %s\n", str2);
return 0;
}
Resposta
Código completo reordenado:
#include <stdio.h>
#include <string.h>
int main() {
char str[20], str2[20];
int i, j = 0;
// Lê a string (até 19 caracteres + '\n')
fgets(str, sizeof(str), stdin);
// Substitui o '\n' por '\0'
str[strlen(str) - 1] = '\0';
// Inverte str em str2
for (i = strlen(str) - 1; i >= 0; i--) {
str2[j] = str[i];
j++;
}
// Fecha str2 com '\0'
str2[j] = '\0';
// Mostra o reverso
printf("str2 = %s\n", str2);
return 0;
}