Ir ao conteúdo

dificuldade de interpretar um programa


Mateus Moura

Posts recomendados

Postado

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);
Postado

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.

Postado

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

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.

Postado

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.

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!