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. O código deve tratar isso, substituindo esse caractere por backslash 0.
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> é para fgets e printf.
  • <string.h> é para usar strlen.
  • str vai guardar o texto que o usuário digita.
  • str2 vai receber o reverso.
  • i é nosso índice de leitura de str de trás pra frente, j é o índice de escrita em str2.

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;
}

Exercícios relacionados