Autor
|
Tema: Problema con palindromo (Leído 3,115 veces)
|
Bob1098
Desconectado
Mensajes: 87
|
Hola, estoy intentando resolver este problema, en el código viene el enunciado en un comentario: /*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
Mensajes: 1.314
|
Estas comparando "palabra", que si tiene o puede tener mayúsculas con aux a las que has eliminado las mayúsculas: for(int i=0; i<longCad(aux); i++) { // Bucle para convertir cualquier mayuscula a minuscula. if(aux[i]<97){ palabra[i]+= 32; aux[i] += 32; } }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
Blaster
Desconectado
Mensajes: 190
|
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
Mensajes: 1.248
|
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: std::string Invertir( const std::string& cadena ) { return std::string( cadena.rbegin( ), cadena.rend( ) ); }
* Pasar a minúsculas: std::string AMinusculas( const std::string& cadena ) { std::string to_return = cadena; std::transform( to_return .begin( ), to_return .end( ), to_return .begin( ), ::tolower); return to_return; }
* Comprobar si dos cadenas son iguales: bool Comparar( const std::string& cadena1, const std::string& cadena2 ) { return cadena1 == cadena2; }
* Conocer la longitud de una cadena: int Longitud( const std::string& cadena ) { return cadena.size( ); }
|
|
|
En línea
|
|
|
|
Bob1098
Desconectado
Mensajes: 87
|
Gracias a todos por las respuestas, de todas formas ya conseguí solucionarlo minutos después de postearlo
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Palindromo con Pilas
Programación C/C++
|
Muffin
|
1
|
14,545
|
28 Enero 2011, 02:32 am
por ricardo_b
|
|
|
palindromo
« 1 2 »
Programación C/C++
|
ALONSOQ
|
16
|
11,961
|
7 Agosto 2012, 17:52 pm
por X3R4CK3R
|
|
|
Palindromo en un archivo
Programación C/C++
|
Eva93
|
8
|
4,143
|
30 Agosto 2013, 13:20 pm
por Eva93
|
|
|
Palindromo C++
« 1 2 »
Programación C/C++
|
Bob1098
|
11
|
9,827
|
23 Agosto 2014, 22:45 pm
por leosansan
|
|
|
Palindromo
Java
|
vhh70
|
7
|
4,680
|
9 Junio 2016, 20:54 pm
por DIANA KARINA HM
|
|