Función es_palindromo() completa

Abel Naya

/*
Programa que comprueba si un texto (sucesión de caracteres terminados en punto) corresponde a un palíndromo.
La particularidad reside en que da igual que los caracteres no sean letras o números, los omite. Asimismo da igual que sean mayúscula o minúscula.
*/

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

#define DIM 100


using namespace std; //para cout



//Función que devuelve 1 si es palíndromo y 0 en caso contrario
int es_palindromo(char cadena[])
{
  int i=0,j=strlen(cadena)-1; //utiliza dos punteros (en realidad enteros) que comprueban el array, uno por la derecha y el otro por la izquierda

  while(i<j) //mientras esten separados
  {
    if (!isalnum(cadena[i])) {i++; continue;} //si uno de los dos no es letra o numero se pasa al siguiente
    if (!isalnum(cadena[j])) {j--; continue;}
    if (tolower(cadena[i])!=tolower(cadena[j])) return 0; //si los caracteres son distintos no es palindromo
    i++ ; j-- ;
  }

  return 1; //si los punteros han llegado a juntarse sin ser distintos, es palíndromo (Notese que el caracter central no se comprueba, ya que no influye.
}




//Implementación
int main()
{
  char entrada[DIM];

  cout<<"Introduce una texto terminado en punto (.) Despues pulsa enter.\nSolo se comprobaran los caracteres alfanumericos, puedes incluir cualquier otro (comas, saltos de linea...).\n";
  char prov=0;
  int p=0;
  prov=getchar();
    while( prov!='.' )
    {
      entrada[p]=prov;
      p++;
      prov=getchar();
    }
  entrada[p]='\0';

  cout<<endl<<endl<<"El texto: '"<<entrada<<"' "<<(es_palindromo(entrada) ? "es" : "no es" )<< " un palindromo"; // if-then-else condensado gracias a _?_:_

  return 0;
}

Anuncios
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Una respuesta a Función es_palindromo() completa

  1. very good!

    el algoritmo de recorrer la cadena recuerda al quicksort()!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s