Na aula anterior fizemos um programa para descobrir se uma palavra é palíndroma ou não com a linguagem de programação C. Será que a mesma ideia serve pra verificar se uma frase é palíndroma?
Uma frase é dita palíndroma quando possui o mesmo significado se lida da esquerda para a direita ou da direita para a esquerda e, a resposta à pergunta anterior é NÃO. Antes de verificar se uma frase é palíndroma é necessário fazer uma limpeza na frase, removendo pontuação, espaços e acentos, afinal “u” é diferente de “ú” e “a” é diferente de ” “!
Vamos a um exemplo para facilitar a compreensão. A frase “luz azul” é palíndroma, contudo, se apenas invertermos a string, como fizemos na aula anterior, teremos “luza zul”. Perceba que a quarta letra é um “a” enquanto que na frase original o quarto caracter é um espaço. Por isso apenas inverter a string não será suficiente.
Veja alguns exemplos de frases palíndromas:
luz azul
anotaram a data da maratona
roma me tem amor
a grama é amarga
a mãe te ama
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char palavra[50], copia[50];
int i, tam, diferentes = 0, j = 0;
printf("Digite uma frase: ");
scanf("%50[^\n]", palavra);
// remover => !? .
for(i = 0; i < strlen(palavra); i++){
if(palavra[i] != '!' && palavra[i] != '?' && palavra[i] != ' ' && palavra[i] != '.')
copia[j++] = palavra[i];
}
copia[j] = '\0';
printf("Original: %s\nCopia:%s\n", palavra, copia);
tam = strlen(copia);
tam--;
for(i = 0; i < strlen(copia); i++){
if(copia[i] != copia[tam])
diferentes++;
tam--;
}
if(diferentes == 0)
printf("\nEh palindroma...\n");
else
printf("\nNao eh palindroma...\n");
return 0;
}
Observe que o algoritmo aqui apresentado verifica apelas pelos caracteres exclamação, interrogação, espaço e ponto final. Caso a frase possua algum caracter acentuado, este também deve ser trocado pela letra sem acento:
á, à, â ou ã -> a
é ou ê -> e
í -> i
ó, ô ou õ -> o
ú -> u
