Autor
|
Tema: Problema de strings: Palindromos. (Leído 10,033 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 !FALSE typedef 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 de una 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/perl use strict; use warnings; print "Escriba palabra : "; chomp(my $word = <STDIN>); { } else { }
En Batch: :code set /p "cadena=Cadena : " :bucle for /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 !FALSE typedef 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,677
|
5 Mayo 2011, 03:21 am
por Leyer
|
|
|
Ayuda. Programas para reconocer Números palíndromos.
Programación C/C++
|
theluigy13etv
|
9
|
12,975
|
24 Enero 2012, 15:40 pm
por Xandrete
|
|
|
Problema extraño con una consulta sencilla: Strings, Like
Bases de Datos
|
astinx
|
2
|
2,828
|
10 Marzo 2012, 16:49 pm
por astinx
|
|
|
Problema con STRINGS
Programación C/C++
|
kaskull
|
2
|
2,192
|
28 Diciembre 2012, 19:00 pm
por kaskull
|
|
|
Problema con Palindromos en C
Programación C/C++
|
CNerd
|
1
|
4,316
|
23 Mayo 2014, 09:00 am
por eferion
|
|