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++)
printf("%c", a[j]);
printf("\n");
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++)
printf("%c", a[j]);
printf("\n");
tam_actual++;
}
}
void descomponer3(char *a)
{
int unsigned tam_actual = 2;
int unsigned i, j, x=0;
while(x<(strlen(a)-1))
{
for(i=0; i<(strlen(a)-1); i++)
{
for(j=x; j<tam_actual; j++)
printf("%c", a[j]);
printf("\n");
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;
while(x<(strlen(a)-1))
{
for(i=0; i<(strlen(a)-1); i++)
{
for(j=x; j<tam_actual; j++)
fputc(a[j], file);
fputs("\n", file);
tam_actual++;
}
tam_actual=2;
x++;
}
fclose(file);
}
Saludos.
EDIT: Aprendí a usar la función GeSHi. Gracias Leo Gutierrez.