Verificando se uma palavra é um palíndromo em linguagem C

Verificando se uma palavra é um palíndromo em linguagem C

Neste tutorial de linguagem C vamos criar um pequeno programa que permite verificar se uma dada palavra, fornecida pelo usuário, é um palíndromo.

De acordo com a Wikipedia:

Um palíndromo é uma palavra, frase ou qualquer outra sequência de caracteres que tenha a propriedade de poder ser lida (de forma igual) tanto da direita para a esquerda como da esquerda para a direita. Num palíndromo, normalmente são desconsiderados os sinais ortográficos (diacríticos ou de pontuação), assim como o espaços entre palavras.

Ou seja, qualquer sequência de caracteres que seja a mesma se lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, a palavra "osso" é um palíndromo, pois é idêntica não importa o sentido da leitura.

Para este programa vamos fazer uso de algumas funções de manipulação de strings e importar bibliotecas específicas, como string.h e ctype.h. Vamos ao código.

Código

#include<stdio.h>
#include<string.h>
#include<locale.h>
#include <ctype.h>

int main() {
 setlocale(LC_ALL, "");
 int i, valor = 0;
 char palavra[15], inversa[15];

 printf("\nDigite uma palavra: ");
 gets(palavra);

 //Converter a palavra digitada para minúsculas
 for(i = 0; palavra[i]; i++){
   palavra[i] = tolower(palavra[i]);
 }

 //Copiar a palavra digitada para que seja invertida
 strcpy(inversa, palavra);

 //Inverter a palavra copiada
 strrev(inversa);

 valor = strcmp(palavra, inversa);

 if (valor == 0)
   printf("\nA palavra %s é palíndroma\n", palavra);
 else
   printf("\nA palavra %s não é palíndroma\n", palavra);

 return 0;
}

Crie um novo projeto em C e digite ou copie e cole o código anterior. Compile e execute o programa, fornecendo uma palavra como solicitado no console, e o programa retornará uma mensagem dizendo se a palavra é um palíndromo ou não, como ilustra a figura a seguir:

Verificar palíndromos em linguagem C

No meu exemplo, entre com a palavra "Mussum", e o programa retornou a mensagem de que esta palavra é um palíndromo.

A seguir, vamos explicar sucintamente o funcionamento do código, assim como das funções empregadas em sua construção.

Funcionamento

  • Cabeçalho string.h - A biblioteca string.h implementa um conjunto simples de funções para manipulação de strings, como funções para comparação e cópia de strings, entre outras. As funções strcpy e strcmp pertencem a esse cabeçalho.
  • Cabeçalho ctype.h - O arquivo de cabeçalho ctrype.h implementa diversas funções úteis para manipulação de caracteres, como por exemplo funções para verificar se um caractere é ASCII ou para realizar conversões de maiúsculas para minúsculas e vice-versa. A função tolower pertence a essa biblioteca, assim como muitas outras (toupper, isalpha, isdigit, isspace, etc.).
  • Função gets() - Lê a palavra digitada pelo usuário e a armazena na variável palavra.
  • Função strcpy() - A função strcpy permite copiar uma string, usando a sintaxe strcpy(destino, origem). Em C, não podemos simplesmente atribuir o conteúdo de uma variável string a outra variável diretamente - devemos usar funções para tal.
  • Função strrev() - A função strrev inverte uma string fornecida, de acordo com a sintaxe: strrev(variável_string).
  • Função strcmp() - A função strcmp é usada para comparar duas strings e verificar se são iguais. Sua sintaxe é strcmp(str1, str2). Se ambas as strings forem iguais, um valor zero é retornado.
  • Função tolower() - A função tolower permite converter caracteres em caixa alta para caixa baixa (minúsculas). Sua função inversa é a toupper.

Também é possível implementar esse programa sem a necessidade de usar a função strrev(), que não é padrão nas bibliotecas da linguagem C - em algumas implementações, ela pode não estar presente.

Nesse caso temos de criar nossa própria função para reversão da string, o que faremos na próxima lição.

Próximo: Criando função para inverter string e conferindo palíndromo em linguagem C

 

Sobre Fábio dos Reis (1193 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*