Leoxz Posted June 19, 2011 Report Share Posted June 19, 2011 (edited) hola, estaba buscando algun código que me sirviera para saber si una palabra es palindrome(palabra que es igual leyendola normal o inversamente) o no: #include <stdio.h> #include <stdlib.h> #include <string.h> main(){ char pal1[25], pal2[25]; int x=0,u=0,n,e=0,a=0,p=0; char b=' '; printf("Ingrese la palabra:\n"); gets(pal1); n=strlen(pal1); printf("La palabra %s tiene %d caracteres :\n",pal1,n); for(x=0;x<=n;x++) { if (pal1[x]==b) x++; pal2[e]=pal1[x]; e++; } n=strlen(pal2); for (x=n-1;x>=0;x--) { if (pal2[x]==pal2[a]) p++; a++; } if (p==n){ printf("La Palabra es palindrome\n"); } else{ printf ("La Palabra no es palindrome\n"); } system("PAUSE"); } if (pal1[x]==b) lo que esta en negrita no lo entiendo se supone que la condición se va a ejecutar si es verdadera, pero la variable 'b' no contiene nada, como se ejecuta esa accion ojala me ayuden saludos Edited June 19, 2011 by Leoxz Link to comment Share on other sites More sharing options...
el_caxulo Posted June 19, 2011 Report Share Posted June 19, 2011 b tiene como valor ' ' , eso no es nada, es un espacio, por lo tanto el codigo dice, si el contenido de pal1[x] es igual al ' ' , se salta el espacio y sigue con la siguiente letra. if (pal1[x]==b) x++; Link to comment Share on other sites More sharing options...
Leoxz Posted June 19, 2011 Author Report Share Posted June 19, 2011 (edited) b tiene como valor ' ' , eso no es nada, es un espacio, por lo tanto el codigo dice, si el contenido de pal1[x] es igual al ' ' , se salta el espacio y sigue con la siguiente letra. if (pal1[x]==b) x++; pero eso nunca va a ser igual si por ejemplo, ingreso la palabra oso (palindrome) if(pal1[0]==b) sería falso ya que no es igual y no se ejecutaria el x++ me estoy confundiendo xd Edited June 19, 2011 by Leoxz Link to comment Share on other sites More sharing options...
el_caxulo Posted June 19, 2011 Report Share Posted June 19, 2011 (edited) el programa cuando pide que ingrese una palabra, en realidad puedes ingresar una frase como "Hola oso" , en ese caso el programa lo que hace es saltarse el espacio que hay entre hola y oso, pero sino tiene espacio, no es necesario que entre al if, la idea de ese if es saltarse el espacio, nada mas. en realidad el programa verifica si una <"frase"> es palindrome. ejemplo : 1) Allí por la tropa portado, traído a ese paraje de maniobras, una tipa como capitán usar boina me dejara, pese a odiar toda tropa por tal ropilla 2) Allí si María avisa y así va a ir a mi silla by wikipedia http://es.wikipedia.org/wiki/Pal%C3%ADndromo PD: intenta con O S O , con espacios, para que veas :P . Edited June 19, 2011 by el_caxulo Link to comment Share on other sites More sharing options...
Leoxz Posted June 19, 2011 Author Report Share Posted June 19, 2011 el programa cuando pide que ingrese una palabra, en realidad puedes ingresar una frase como "Hola oso" , en ese caso el programa lo que hace es saltarse el espacio que hay entre hola y oso, pero sino tiene espacio, no es necesario que entre al if, la idea de ese if es saltarse el espacio, nada mas. en realidad el programa verifica si una <"frase"> es palindrome. ejemplo : 1) Allí por la tropa portado, traído a ese paraje de maniobras, una tipa como capitán usar boina me dejara, pese a odiar toda tropa por tal ropilla 2) Allí si María avisa y así va a ir a mi silla by wikipedia http://es.wikipedia.org/wiki/Pal%C3%ADndromo PD: intenta con O S O , con espacios, para que veas :P . ah ahora me quedo claro muchas gracias amigo Link to comment Share on other sites More sharing options...
Sting_Master Posted June 19, 2011 Report Share Posted June 19, 2011 for(x=0;x<=n;x++) { if (pal1[x]==b) x++; pal2[e]=pal1[x]; e++; } como b tiene asignado el espacio, ' ', como esta entre comillas significa que es un caracter, al leer un espacio entra al if, aumenta el x en 1 y despues al salir del if asigna al char que se esta creando el caracter siguiente al espacio. Rutea el programa y lo entenderas mejor Link to comment Share on other sites More sharing options...
cañangasñangas Posted June 19, 2011 Report Share Posted June 19, 2011 haz una funcion que de vuelta el string luego verificas si el string original y el string original dado vuelta son iguales Link to comment Share on other sites More sharing options...
Th3_K4T Posted June 20, 2011 Report Share Posted June 20, 2011 haz una funcion que de vuelta el string luego verificas si el string original y el string original dado vuelta son iguales eso es muy ineficiente xD lo más fácil es con un for recorrer el vector desde el final y desde el principio al mismo tiempo, e ir comparando. un pseudocódigo sería mas menos así: boolean palindromo(char *string){ int tope, i; tope=largo(string); for(i=0;i<tope;i++) { if(string[i] != string[tope]) return false; tope--; } return true; } Link to comment Share on other sites More sharing options...
lostinspacex Posted June 23, 2011 Report Share Posted June 23, 2011 haz una funcion que de vuelta el string luego verificas si el string original y el string original dado vuelta son iguales eso es muy ineficiente xD lo más fácil es con un for recorrer el vector desde el final y desde el principio al mismo tiempo, e ir comparando. un pseudocódigo sería mas menos así: boolean palindromo(char *string){ int tope, i; tope=largo(string); for(i=0;i<tope;i++) { if(string[i] != string[tope]) return false; tope--; } return true; } tienes un error tope se sale del arreglo , comienzas comparando con algo que está fuera del arreglo , tope es el largo menos 1 . Link to comment Share on other sites More sharing options...
Th3_K4T Posted June 23, 2011 Report Share Posted June 23, 2011 (edited) haz una funcion que de vuelta el string luego verificas si el string original y el string original dado vuelta son iguales eso es muy ineficiente xD lo más fácil es con un for recorrer el vector desde el final y desde el principio al mismo tiempo, e ir comparando. un pseudocódigo sería mas menos así: boolean palindromo(char *string){ int tope, i; tope=strlen(string); for(i=0;i<tope;i++) { if(string[i] != string[tope]) return false; tope--; } return true; } tienes un error tope se sale del arreglo , comienzas comparando con algo que está fuera del arreglo , tope es el largo menos 1 . en realidad, no me di cuenta, es que lo hice a la rápida, gracias, quedaría así entonces: boolean palindromo(char *string){ int tope, i; tope=strlen(string); for(i=0;i<tope;i++) { if(string != string[tope-1]) return false; tope--; } return true; } Edited June 23, 2011 by Th3_K4T Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now