elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con palindromo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con palindromo  (Leído 3,115 veces)
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Problema con palindromo
« en: 31 Mayo 2014, 17:51 pm »

Hola, estoy intentando resolver este problema, en el código viene el enunciado en un comentario:

Código:

/*5.Hacer un programa que contenga una función con el prototipo bool Palindromo(char palabra[40]);.
La función debe devolver true si la palabra es un palíndromo, y false si no lo es.
Una palabra es un palíndromo si cuando se lee desde el final al principio es igual que leyendo desde el principio,
por ejemplo: "Otto", o con varias palabras "Anita lava la tina", "Dábale arroz a la zorra el abad".
En estos casos debemos ignorar los acentos y los espacios, pero no es necesario que tu función haga eso,
bastará con probar cadenas como "anitalavalatina", o "dabalearrozalazorraelabad".
La función no debe hacer distinciones entre mayúsculas y minúsculas.*/

#include <iostream>
#include <cstring> //Para strcmp() y strcpy()

using namespace std;

bool Palindromo(char[]); //Comprueba si la palabra es un palíndromo o no
void Invertir(char[], int); //Invierte los elementos de un array tipo char.
int longCad(char[]); //Calcula la longitud de una cadena

int main() {
char posiblePalindromo[40];

cout << "Introduce un palindromo: ";
cin >> posiblePalindromo;

if(Palindromo(posiblePalindromo)) {
cout << "Si, es un palindromo. " << endl;
}
else cout << "No, no es un palindromo. " << endl;

cin.get();
return 0;
}

bool Palindromo(char palabra[40]) {
char aux[40];
strcpy(aux, palabra); //Hacemos una copia en la variable aux, para poder compararlas posteriormente.

for(int i=0; i<=longCad(aux); i++) { // Bucle para convertir cualquier mayuscula a minuscula.
if(isupper(aux[i])) aux[i] = tolower(aux[i]);
}
Invertir(aux, longCad(aux));

if(strcmp(aux, palabra) == 0) return true;
else return false;
}

void Invertir(char a[], int m) {
int i = 0, j = m-1, aux;
while(i < (m / 2)) {
aux = a[i];
a[i] = a[j];
a[j] = aux;
i++; j--;
}
}

int longCad(char a[]) {
int n = 0;
while(a[n] != 0) n++;
return n;
}

En principio, el programa me funciona bien, pero no consigo solucionar que el programa ingore las mayúsculas a la hora comprobar el palíndromo. He escrito un bucle for en la función para convertir cualquier mayúscula a minúscula, pero es como si el bucle no existiera, cuando escribo un palíndromo con mayúsculas y minúsculas me dice que no lo es, pero cuando lo escribo todo en minúscula me dice que si. ¿Alguna idea?


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con palindromo
« Respuesta #1 en: 31 Mayo 2014, 18:16 pm »

Estas comparando "palabra", que si tiene o puede tener mayúsculas con aux a las que has eliminado las mayúsculas:

Código
  1. for(int i=0; i<longCad(aux); i++) { // Bucle para convertir cualquier mayuscula a minuscula.
  2.    if(aux[i]<97){
  3.      palabra[i]+= 32;
  4.      aux[i] += 32;
  5.     }
  6.   }


¡¡¡¡ Saluditos! ..... !!!!




En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Problema con palindromo
« Respuesta #2 en: 31 Mayo 2014, 18:18 pm »

En principio, el programa me funciona bien, pero no consigo solucionar que el programa ingore las mayúsculas a la hora comprobar el palíndromo. He escrito un bucle for en la función para convertir cualquier mayúscula a minúscula, pero es como si el bucle no existiera, cuando escribo un palíndromo con mayúsculas y minúsculas me dice que no lo es, pero cuando lo escribo todo en minúscula me dice que si. ¿Alguna idea?

No te funciona por que si en el caso de que la cadena se mayuscula tu la conviertes en minuscula y la guardas en la variable auxiliar y luego la comparas con la cadena original que esta en mayuscula y te retorna false ya que son diferentes

Saludos
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema con palindromo
« Respuesta #3 en: 31 Mayo 2014, 18:29 pm »

Lo que te sucede es que únicamente estás pasando a minúsculas 'aux'... ¿qué pasa con 'palabra'?

Al no convertir ambas cadenas a minúsculas es difícil que coincidan.

PD.: Si usas C++... por qué no usas la clase string??

* Invertir una cadena:

Código
  1. std::string Invertir( const std::string& cadena )
  2. {
  3.  return std::string( cadena.rbegin( ), cadena.rend( ) );
  4. }

* Pasar a minúsculas:

Código
  1. std::string AMinusculas( const std::string& cadena )
  2. {
  3.  std::string to_return = cadena;
  4.  std::transform( to_return .begin( ), to_return .end( ), to_return .begin( ), ::tolower);
  5.  return to_return;
  6. }

* Comprobar si dos cadenas son iguales:

Código
  1. bool Comparar( const std::string& cadena1, const std::string& cadena2 )
  2. {
  3.  return cadena1 == cadena2;
  4. }

* Conocer la longitud de una cadena:

Código
  1. int Longitud( const std::string& cadena )
  2. {
  3.  return cadena.size( );
  4. }
En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Problema con palindromo
« Respuesta #4 en: 1 Junio 2014, 19:33 pm »

Gracias a todos por las respuestas, de todas formas ya conseguí solucionarlo minutos después de postearlo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Palindromo con Pilas
Programación C/C++
Muffin 1 14,545 Último mensaje 28 Enero 2011, 02:32 am
por ricardo_b
palindromo « 1 2 »
Programación C/C++
ALONSOQ 16 11,961 Último mensaje 7 Agosto 2012, 17:52 pm
por X3R4CK3R
Palindromo en un archivo
Programación C/C++
Eva93 8 4,143 Último mensaje 30 Agosto 2013, 13:20 pm
por Eva93
Palindromo C++ « 1 2 »
Programación C/C++
Bob1098 11 9,827 Último mensaje 23 Agosto 2014, 22:45 pm
por leosansan
Palindromo
Java
vhh70 7 4,680 Último mensaje 9 Junio 2016, 20:54 pm
por DIANA KARINA HM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines