aula 144

Como descobrir se uma frase é palíndroma com a linguagem C?

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



Deixe um comentário

18 − 13 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.