Ir ao conteúdo
  • Cadastre-se
Mateus Moura

RESOLVIDO dificuldade de interpretar um programa

Recommended Posts

ola galera, tem pouco tempo que estou estudando C. Estou usando uma apostila e cheguei num exercício que pede pra fazer um programa que inverta uma string, ate ai beleza. Minha duvida nao se encontra no programa todo mas sim em uma linha. Gostaria muito da ajuda de vocês

 

 
char nome[50];
char nome2[50];
int i,j;
 
 
printf("Insira sua sring:\n");
gets(nome);
 
 
for(i=0;nome;i++);
 
for(j=0;nome2[j];j++)
nome2[j]=nome[i-j-1];  /*nao estou entendendo essa linha*/
 
 
nome2[j]=0;
printf("%s",nome2);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando tiver uma dúvida assim, basta fazer o famoso "teste de mesa", ou "escreva no papel os valores da memória".

 

for(i=0;nome;i++);

 

Esse código acima, vai apenas pegar o tamanho de nome[] e colocar em i.

Cada string que você digita com o scanf ou gets termina em um character nulo ("\0"), então esse FOR vai testar se nome é igual a zero, quando sim, o FOR termina e i terá o tamanho da string.

(Era mais simples usar strlen() )

 

for(j=0;nome2[j];j++)

 

No segundo FOR, digamos que i seja igual a 20, que é o tamanho de nome, e j começará em 0. Então, no primeiro loop desse for você terá:

nome2[0] = nome[20 -0 -1] ---> nome2[0] será igual a nome[19]

 

Segundo loop, j é igual a 1:

nome2[1] = nome[20 -1 -1] ---> nome2[1] será igual a nome[18]

 

Terceiro loop, j igual a 2:

nome2[2] = nome[20 -2 -1] ---> nome2[2] = nome[17]

 

E assim por diante.

Ele tá percorrendo o array nome2[] de 0 até 20, e colocando nele os elementos do array nome[] de 20 até 0.

 

A única coisa que tô achando estranho é o critério de parada da segunda array (nome2[j]), pois testei aqui e não funciona. Ou você digitou errado, ou tem alguma parte do código antes disso que inicializou aqueles valores.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito obrigado, consegui compreender a logica toda. 

o programa todo ficou deste jeito, e aqui ta funcionando direitinho.

 

 

#include<stdio.h>
#include<stdlib.h>
 
 
int main()
{
 
char nome[50];
char nome2[50];
int i,j;
 
 
printf("Insira sua sring:\n");
gets(nome);
 
 
for(i=0;nome;i++);
 
for(j=0;nome2[j];j++)
nome2[j]=nome[i-j-1];
 
 
nome2[j]=0;
printf("%s\n",nome2);
 
 
 
system("pause");
return (0);
 
 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza que tá funcionando corretamente?

 

Nesse FOR aqui:

for(j=0;nome2[j];j++)

 

O programa tá testando o valor de nome2[j] antes de nome2[j] ser setado. Compilei no gcc e ele não imprime nome2[] corretamente.

Se no segundo FOR eu trocar nome2[j] por nome[j], daí ele funciona corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

algoritmos proposto não inverte, mais sim, cópia invertido, ou propõe isso pelo menos. Eu pensei que a alterações seria no mesmo vetor. Foi o que entendo da sua questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×