Ir ao conteúdo
  • Cadastre-se

Invertendo uma string.


Matheus222622

Posts recomendados

Olá, antes de mais nada gostaria de dizer obrigado a quem responder minha dúvida. Bom eu estou aprendendo a linguagem C, e em um dos livros que estou lendo, vi um código que utiliza a recursividade para inverter uma string:

#include <stdio.h>
#define SIZE 80
void reverse( const char * const sPtr ); // prototype
int main( void )
{
   char sentence[ SIZE ]; // create char array
   puts( "Enter a line of text:" );
   // use fgets to read line of text
   fgets( sentence, SIZE, stdin );
   puts( "\nThe line printed backward is:" );
   reverse( sentence );
} // end main
// recursively outputs characters in string in reverse order
void reverse( const char * const sPtr )
{
   // if end of the string
   if ( '\0' == sPtr[ 0 ] ) { // base case
      return;
      } // end if
      else { // if not end of the string
           reverse( &sPtr[ 1 ] ); // recursion step
           putchar( sPtr[ 0 ] ); // use putchar to display character 
      } // end else
} // end function reverse

Código retirado do livro: C - How to Program 7th edition, página: 347, autor: Deitel.

 

Minha dúvida é a seguinte: como a função "reverse" funciona? Algúem pode me explicar detalhadamente? Porque não consegui entender como ela inverte um string, sendo que na linha: 21, a chamada "reverse" é chamada e recebe como argumento o endereço de memória do segundo espaço do array "sentence", e eu imagino, como ela inverte um string sendo que na próxima chamada recursiva, ela vai receber novamente "o endereço de memória do segundo espaço do array(sentence)".

 

Desde já agradeço a qualquer um que se comprometer a sanar minha dúvida.

Link para o comentário
Compartilhar em outros sites

@Matheus222622
A chamada da função :

reverse( &sPtr[ 1 ] ); // recursion step

retorna um ponteiro que aponta para o 2 elemento da string, mas é assim:

chamada 1: "completa";
chamada 2: "ompleta";

chamada 2: "mpleta";

chamada 2: "pleta";

Ai, quando chegar no "\n", o if da return e retorna para a ultima chamada recursiva, que estava dentro do else e não tinha executado o printf/putchar. São essas voltas das chamadas anteriores que ativam o printf/putchar que imprime de trás pra frente.

Deu pra entender?

 

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!