Cita de: Serapis en 6 Diciembre 2021, 13:33 PM
En vez de complicarte eliminando espacios, simplemente sáltalos.
Tendrás 2 punteros, el de posición de lectura del principio, y el del final.
Mientras un cáracter sea espacio (ó puntuaciíon: ',' '.' ':' ';', paréntesis, etc..) avanzas sin hacer la comparación, así llegas a un carácter comparable.
Luego igual desde el final, cuando localizas dos caracteres comparables, es cuando realizas dicha comparación.
Es realidad, es preferible hacer saltos, simplificando la lógica, es decir mientras no sea un carácter saltar al siguiente...Código [Seleccionar]
entero ini=0, fin= cadena.length
buleano pal=FALSE
Hacer mientras (Ini < fin)
// saltar caracteres 'extraños' de la parte delantera
hacer mientras esAlfaAZ(texto(ini))= false
ini +=1
si (ini >= fin) devolver pal
repetir
// saltar caracteres extraños de la parte trasera
hacer mientras esAlfaAZ(texto(fin))= false
fin -=1
si (fin<= ini) devolver pal
repetir
// comparar la pareja de caracteres vigente
si (texto(ini) <> texto(fin)) devolver FALSE
ini +=1
fin -=1
pal= true
repetiir
devolver TRUE
Con este pseudocódigo para evitar que devuelva como palíndromo un texto que no contuviera ni un solo carácter, alfabético en el rango AZ... se controla, desde la última línea del bucle, solo si se ha ejecutado al menos una vez una comparación satisfactoria, 'pal= TRUE'.
...y es de suponer que la capitalización no debe ser un obstáculo para considerarlo palíndromo, pero esto último abórdalo solo cuando hayas solucionado el problema y te
funcione bien.
Es que mi profesora dijo que debe llevar la función de quitar los espacios y después para saber si es palindromo, usar otra subrutina que compare los caracteres del inicio con los del final de la cadena sin espacios. Pero ahí ya no sé cómo se hace el ciclo con for, que es lo que me pide también
Cita de: MAFUS en 6 Diciembre 2021, 11:37 AM
No te acuerdas cómo funcionan las cadenas en C.
Acuérdate del carácter terminal y que en una cadena construida a mano, como en quitar_espacios, C no te lo va a incluir automáticamente.
Después explícame qué haces en la función palindromo. No lo que deberías hacer, sino lo qué haces.
Dijo mi profesora que por eso debíamos usar la función strlen, para que no contara el caracter nulo del final.
La función se supone que divide la cadena a la mitad y compara si esas son iguales, entonces sí es palíndromo, pero estoy confundida precisamente en esa parte, ya que mi profesora me dijo que debía comparar los caracteres de esa cadena, los del principio con los del final y si eran iguales, ya te dice si es o no palíndromo. Pero no sé cómo debería hacer eso usando for.
MOD: No hacer doble post