| 
	
		|  Autor | Tema: Problema de strings: Palindromos.  (Leído 10,748 veces) |  
	| 
			| 
					
						| j retirado | 
 
Para ver qué es un palindromo, véase Palindromo . Posteen más soluciones. /* Algoritmo que te dice si una palabra es palindromo */ #include <stdio.h>#include <stdlib.h>#include <string.h> #define ES_PALIN printf("\n\nEs palindromo\n\n");#define NO_PALIN printf("\n\nNo es palindromo\n\n");#define FALSE 0#define TRUE !FALSEtypedef int Bool; void es_palindromo(char *a){        Bool b = TRUE;        int i;         for(i=0; i<strlen(a); i++, ultPos--)        {                if(a[i] != a[ultPos])                {                        b = FALSE;                        break;                }        }         if(b) ES_PALIN        else NO_PALIN;} int main(){        char *a = (char *) calloc (20, sizeof(char));         es_palindromo(a);          return 0;} 
 Saludos.
 
 |  
						| 
								|  |  
								| « Última modificación: 28 Junio 2009, 19:43 pm por j.rm » |  En línea | 
 
 |  |  |  | 
			| 
					
						| j retirado | 
 
Un enunciado más complicado del problema: Una hilera de letras, o palabra, se llama palindromo cuando tiene más deuna letra y leída de izquierda a derecha y de derecha a izquierda son
 iguales, por ejemplo, ababa.
 
 Una hilera se llama i-palindromo cuando quitando el primer carácter de la
 izquierda se convierte en palindromo, por ejemplo casa.
 
 Una hilera se llama d-palindromo cuando quitando el primer carácter de la
 derecha se convierte en palindromo, por ejemplo amad.
 
 Llamaremos palabras distinguidas a aquellas que son palindromo, ipalindromo
 o d-palindromo.
 
 El problema consiste en recibir una palabra y determinar los cortes, si los
 hubiera, que la descomponen en dos palabras distinguidas, e indicar para
 cada una de ellas de que tipo o tipos es.
 
 Ejemplo 1:
 Si la entrada contiene:
 azarosos
 
 La salida podría contener:
 azar d-palindromo
 osos i-palindromo d-palindromo
 etc.
 
 Ejemplo 2:
 Si la entrada contiene:
 amarrar
 
 La salida podría contener:
 ama palindromo
 rrar i-palindromo
 amar d-palindromo
 rar palindromo
 etc.
 
 Yo hice un par de funciones que descompenen un string en substring (por asi decirlo) y que pueden ayudar un poco en la solución. Pruebenlas y comenten. void descomponer(char *a){        int unsigned tam_actual = strlen( a);        int unsigned i, j;        for(i=0;  i<(strlen( a)-1);  i++)        {                for(j=0; j<tam_actual; j++)                tam_actual--;        }} void descomponer2(char *a){	int unsigned tam_actual = 2;	int unsigned i, j; 	for(i=0;  i<(strlen( a)-1);  i++)	{		for(j=0; j<tam_actual; j++)		tam_actual++;	}} void descomponer3(char *a){	int unsigned tam_actual = 2;	int unsigned i, j, x=0; 	{		for(i=0;  i<(strlen( a)-1);  i++)		{			for(j=x; j<tam_actual; j++)			tam_actual++;		}		tam_actual=2;		x++;	}} El siguiente simplemente redirige la salida en un fichero:void descomponer4(char *a){	FILE * file = fopen("descomponer.txt","w");	int unsigned tam_actual = 2;	int unsigned i, j, x=0; 	{		for(i=0;  i<(strlen( a)-1);  i++)		{			for(j=x; j<tam_actual; j++)			tam_actual++;		}		tam_actual=2;		x++;	} } 
 Saludos. EDIT: Aprendí a usar la función GeSHi. Gracias Leo Gutierrez.
 
 |  
						| 
								|  |  
								| « Última modificación: 30 Junio 2009, 12:41 pm por j.rm » |  En línea | 
 
 |  |  |  | 
			| 
					
						| h0oke 
								       
								
								 Desconectado 
								Mensajes: 2.059
								
								 
								Coder ~
								
								
								
								
								
								     | 
 
Muy lindos los ejercicios. Felicitaciones |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Ragnarok | 
 
int esPalindromo(char *s){  for (int i=0, j=strlen(s)-1; s[i] == s [j] && i < j; i++, j--);  return i >= j;}
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| leogtz 
								. . .. ... ..... ........ ............. ..................... 
								Colaborador
								      Desconectado 
								Mensajes: 3.069
								
								 
								/^$/
								
								
								
								
								
								     | 
 
#include <stdio.h>#include <string.h>void cadena_inversa(char cadena[], char cadena2[]);int main(void){    char cadena[200];    char cadena2[200];    cadena_inversa(cadena, cadena2);    else    return 0;}void cadena_inversa(char cadena[], char cadena2[]){/* Se copia la cadena inversa en "cadena2" */    signed int contador = 0;    for(signed int i = strlen( cadena)-1;  i >= 0;  i--)    cadena2[contador++] = cadena[i];    cadena2[contador] = 0;    }
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| leogtz 
								. . .. ... ..... ........ ............. ..................... 
								Colaborador
								      Desconectado 
								Mensajes: 3.069
								
								 
								/^$/
								
								
								
								
								
								     | 
 
En Perl: #!/usr/bin/perluse strict;use warnings;print "Escriba palabra : ";chomp(my $word = <STDIN>);{} else {}
 En Batch: :codeset /p "cadena=Cadena : ":buclefor /l %% _ in (%longitud% =-1=0) do <nul set  /p "=!cadena_:~% style="color: #448888;">%_,1!" >> "file.txt"for /f "tokens=*" %% _ in ( file.txt) do ()
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| j retirado | 
 
Algo más para el segundo enunciado. i-palindromo, d-palindromo: #define FALSE 0#define TRUE !FALSEtypedef int Bool; Bool palindromo(char *a);void es_ipalindromo(char *a);void es_dpalindromo(char *a); Bool palindromo(char *a){	Bool b = TRUE;	int unsigned i, j; 	for(i=0,  j=strlen( a)-1;  i< strlen( a);  i++,  j--)	{		if(a[i] != a[j]) b = FALSE;		break;        }	return b;} void es_ipalindromo(char *a){	int unsigned i;	for(i=1; i<strlen(a); i++)		b[i] = a[i]; 	if(palindromo(b))		printf("%s \tES i-palindromo\n", a);	else		printf("%s \tNO i-palindromo\n", a); } void es_dpalindromo(char *a){	int unsigned i;	for(i=0; i<strlen(a)-1; i++)		b[i] = a[i]; 	if(palindromo(b))		printf("%s \tES d-palindromo\n", a);	else		printf("%s \tNO d-palindromo\n", a); } 
 Saludos. |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Ragnarok | 
 
En python: palindromo = lambda s: s[:len(s)//2] == s[:(len(s)-1)//2:-1]
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Problema enviando Strings por sockets en una multiconexion por Thread Java
 | undercode2 | 1 | 2,823 |  5 Mayo 2011, 03:21 am por Leyer
 |  
						|   |   | Ayuda. Programas para reconocer Números palíndromos. Programación C/C++
 | theluigy13etv | 9 | 13,598 |  24 Enero 2012, 15:40 pm por Xandrete
 |  
						|   |   | Problema extraño con una consulta sencilla: Strings, Like Bases de Datos
 | astinx | 2 | 3,038 |  10 Marzo 2012, 16:49 pm por astinx
 |  
						|   |   | Problema con STRINGS Programación C/C++
 | kaskull | 2 | 2,541 |  28 Diciembre 2012, 19:00 pm por kaskull
 |  
						|   |   | Problema con Palindromos en C Programación C/C++
 | CNerd | 1 | 4,667 |  23 Mayo 2014, 09:00 am por eferion
 |    |