Ir ao conteúdo
  • Cadastre-se

dificuldade de interpretar um programa


Mateus Moura
Ir à solução Resolvido por dontpanic,

Posts recomendados

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);
Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
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);
 
 
}
Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!