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>é parafgetseprintf.<string.h>é para usarstrlen.strvai guardar o texto que o usuário digita.str2vai receber o reverso.ié nosso índice de leitura destrde 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;
}