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