¡Buenas!
Estaba corrigiendo el código para que tuviese en cuenta los espacios y las eñes, y la parte de los espacios va sobre ruedas, pero por lo menos en Debian no reconoce las eñes, ni introduciendolas como caracteres ni introduciendo sus valores, ni con signo ni sin signo...
¿Alguien puede confirmarmelo?
¡Saludos!
________________________________________________________________________________________________________
PD: Cambiando la condición isspace por !isalnum ignoraréis cualguier cosa que no sea un caracter o un número (incluida la ñ...). Por ejemplo:
Lo de la ñ debe ser porque lo considera un caracter multibyte..., ahora investigo un poco mas.
Con la última modificación ha quedado un poco mas compacto pero un poco menos legible XD.
¡Saludos!
________________________________________________________________________________________________________
sizeof('ñ') en Debian, me está diciendo que son 4 bytes...
Estaba corrigiendo el código para que tuviese en cuenta los espacios y las eñes, y la parte de los espacios va sobre ruedas, pero por lo menos en Debian no reconoce las eñes, ni introduciendolas como caracteres ni introduciendo sus valores, ni con signo ni sin signo...
¿Alguien puede confirmarmelo?
Código (c) [Seleccionar]
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char mayus(char c)
{
if(c == 'ñ')
return 'Ñ';
return toupper(c);
}
int palindromo(char *s)
{
int ini = 0 , fin = strlen(s) - 1;
while(ini < fin)
{
while(isspace(s[ini]) && s[ini])
ini++;
while(isspace(s[fin]) && fin > 0)
fin--;
if(ini < fin && mayus(s[ini]) != mayus(s[fin]))
return 0;
ini++;
fin--;
}
return 1;
}
int main ()
{
char text[100]="dabale\n \t Arroz a la zorra el abad";
char texto[100]=" aMa \n ña ÑamA";
int i=0;
printf("%d %d\n", (unsigned char)'ñ' , (unsigned char) 'Ñ');
printf("%s",text);
for(;text[i]==text[strlen(text)-i-1] && strlen(text)/2>i++;);
printf (i>strlen(text)/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
printf(palindromo(text) ? "\n Es un palindromo ": "\n No es un palindromo ");
printf(palindromo(texto) ? "\n Es un palindromo ": "\n No es un palindromo ");
return 0;
}
¡Saludos!
________________________________________________________________________________________________________
PD: Cambiando la condición isspace por !isalnum ignoraréis cualguier cosa que no sea un caracter o un número (incluida la ñ...). Por ejemplo:
Código (c) [Seleccionar]
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int mayus(int c)
{
if(c == 'ñ')
return 'Ñ';
return toupper(c);
}
int palindromo(char *s)
{
int ini = 0 , fin = strlen(s) - 1;
while(ini < fin)
{
while(!isalnum(s[ini]) && s[ini++]);
while(!isalnum(s[fin]) && fin-- > 0);
if(ini < fin && mayus(s[ini++]) != mayus(s[fin--]))
return 0;
}
return 1;
}
int main ()
{
char texto[100]="a man, \n a p\tlan, a canal, panama";
int i;
printf("%s",texto);
for(;texto[i]==texto[strlen(texto)-i-1] && strlen(texto)/2>i++;);
printf (i>strlen(texto)/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
printf(palindromo(texto) ? "\n Es un palindromo ": "\n No es un palindromo ");
return 0;
}
Lo de la ñ debe ser porque lo considera un caracter multibyte..., ahora investigo un poco mas.
Con la última modificación ha quedado un poco mas compacto pero un poco menos legible XD.
¡Saludos!
________________________________________________________________________________________________________
sizeof('ñ') en Debian, me está diciendo que son 4 bytes...