Palíndromos. Um palíndromo é uma string que pode ser escrita da mesma forma nos dois sentidos, de frente para trás e de trás para a frente. Alguns exemplos de palíndromos são: ‘radar’, ‘salta o atlas’ e, se você ignorar espaços e acentos, ‘Oto come doce seco de mocotó’. Escreva uma função recursiva testPalindrome que retorne 1 se a string armazenada no array for um palíndromo, e 0 se não for. A função deverá ignorar espaços e sinais de pontuação na string.

Passo 1

Fala Galera!!! Tudo certo? Espero que sim!!! Bora para mais um exercício.

Vamos criar um programa que seja capaz de verificar se uma frase é um palíndromo ou não. Uma frase é considera um palíndromo quando a escrita dela é possível de frente para trás e de trás para frente. Para isso vamos criar um função testPalindrome() que será responsável por verificar se a string digitada pelo usuário é ou não um palíndromo. A função receberá como parâmetro a string e também os caracteres percorrendo pela esquerda e pela direita.

Escrevendo nossa função ficará da seguinte forma:

int testPalindrome( char array[], int left, int right )

{

/* test array para ver se um palíndromo */

if ( left == right || left > right ) {

return 1;

} /* end if */

else if ( array[ left ] != array[ right ] ) {

return 0;

} /* end else if */

else {

return testPalindrome( array, left + 1, right - 1 );

} /* end else */

} /* end function testPalindrome */

Passo 2

Agora dentro da função principal main() vamos utilizar estruturas de repetições para que seja possível percorrer a frase digitada pelo usuário percorrendo cada caractere da frase, e passar como parâmetro para a função testPalindrome que irá retorna se a frase é ou não um palíndromo:

#include

#define SIZE 80

/* protótipo de função */

int testPalindrome( char array[], int left, int right );

int main()

{

char c;

/* retém temporariamente a entrada do teclado */

char string[ SIZE ];

/* string original */

char copy[ SIZE ];

/* cópia da string sem espaços */

int count = 0;

/* comprimento da string */

int copyCount;

/* comprimento da cópia */

int i; /* contador */

printf("Digite uma frase:\n");

/* pega a frase para testar o usuário */

while ( ( c = getchar() ) != '\n' && count

string[ count++ ] = c;

} /* end while */

string[ count ] = '\0';

/* termina a string */

/* faz uma cópia da string sem espaços */

for ( copyCount = 0, i = 0; string[ i ] != '\0'; i++ ) {

if ( string[ i ] != ' ' ) {

copy[ copyCount++ ] = string[ i ];

} /* end if */

} /* end for */

/* imprime se a frase é ou não um palíndromo */

if ( testPalindrome( copy, 0, copyCount - 1 ) ) {

printf( "\"%s\" é um palíndromo\n", string );

} /* end if */

else {

printf( "\"%s\" não é um palíndromo\n", string );

} /* end else */

return 0; /* indicate successful termination */

} /* end main */

Passo 3

Agora é só compilar nosso programa e verificar se está funcionando corretamente.

Vamos primeira testar para uma palavra que não é um palíndromo.

E assim nosso programa está finalizado galera. Até o próximo exercício.

Resposta

#include

#define SIZE 80

/* protótipo de função */

int testPalindrome( char array[], int left, int right );

int main()

{

char c;

/* retém temporariamente a entrada do teclado */

char string[ SIZE ];

/* string original */

char copy[ SIZE ];

/* cópia da string sem espaços */

int count = 0;

/* comprimento da string */

int copyCount;

/* comprimento da cópia */

int i; /* contador */

printf("Digite uma frase:\n");

/* pega a frase para testar o usuário */

while ( ( c = getchar() ) != '\n' && count

string[ count++ ] = c;

} /* end while */

string[ count ] = '\0';

/* termina a string */

/* faz uma cópia da string sem espaços */

for ( copyCount = 0, i = 0; string[ i ] != '\0'; i++ ) {

if ( string[ i ] != ' ' ) {

copy[ copyCount++ ] = string[ i ];

} /* end if */

} /* end for */

/* imprime se a frase é ou não um palíndromo */

if ( testPalindrome( copy, 0, copyCount - 1 ) ) {

printf( "\"%s\" é um palíndromo\n", string );

} /* end if */

else {

printf( "\"%s\" não é um palíndromo\n", string );

} /* end else */

return 0; /* indicate successful termination */

} /* end main */

/* função para ver se a frase é um palíndromo */

int testPalindrome( char array[], int left, int right )

{

/* test array para ver se um palíndromo */

if ( left == right || left > right ) {

return 1;

} /* end if */

else if ( array[ left ] != array[ right ] ) {

return 0;

} /* end else if */

else {

return testPalindrome( array, left + 1, right - 1 );

} /* end else */

} /* end function testPalindrome */