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 */