// Programación en C++ para Ingenieros, Ed. Thomson Paraninfo, 2006
// Capitulo 6: Tipos Estructurados

// Programa que dada una frase con como máximo N caracteres,
// sin signos de puntuación y acabada en punto '.',
// indica si es o no un palíndromo.

#include <iostream>
#include <string>

using namespace std;

// Definición de constantes
const int N = 250; // Consideramos que la frase (sin signos de puntuación)
                   // tiene un maximo de 250 caracteres sin contar espacios

// Programa principal
int main()
{
  // Declaracion de variables
  char frase[N+1];     // Frase sin contar espacios, pero con el punto '.'
  bool ser_pal = true; // Valdrá falso si la frase no es un palíndromo.
  int i = 0, n;        // i: Índice que recorre la frase.
                       // n: Longitud de la frase.

  // Leemos la frase carácter a carácter sin contar los espacios.
  // Obsérvese que no se lee la frase usando cin.getline,
  // cin.getline( frase, 250, '.' );
  // porque no tenemos que considerar los espacios entre las palabras.
  cout << "Escribe una frase acabada en punto:" << endl;
  cin >> frase[i];
  while ( frase[i] != '.' ) cin >> frase[++i];

  // Ponemos el centinela '\0' para poder usar la función strlen()
  frase[i] = '\0';
  n = strlen(frase);

  // Comprobamos si la frase es un palíndromo utilizando el esquema de búsqueda
  i = 0;
  while ( ( i < n / 2 ) && ( ser_pal ) )
  {
    if ( frase[i] != frase[n-i-1] ) ser_pal = false;
    else i++;
  }

  if ( ser_pal )
    cout << "La frase es un palindromo." << endl ;
  else
    cout << "La frase no es un palindromo." << endl ;

  return 0;
}