
28/04/2005, 16:00
|
 | | | Fecha de Ingreso: noviembre-2002 Ubicación: buenos aires
Mensajes: 55
Antigüedad: 22 años, 4 meses Puntos: 0 | |
GRacias x contestar!!!.. Ya logre q me funq.. Aca dejo el codigo x si alguien lo necesita.
Saludos
Yas
Código:
#include <stdio.h>
# define M 40
# define N 40
int comparac (char [], char [], int);
void comparal (char [], char [], char[], int*);
void pasar_letra (char [], int* );
void intercambiar (char [], char []);
void sacar_en(char *);
int main ()
{
char diccionario [M]= "saca,casa,cosa,asca,cosita,colorado,";
char cadena [N];
char aux1[M]="";
int pos=0;
printf ("Ingrese una cadena de caracteres: ");
fgets (cadena,N,stdin);
fflush(stdin);
sacar_en(cadena);
while (diccionario[pos]!='\0') /* mientras no termine el dicc */
{
if (comparac(diccionario,cadena,pos)==1) /* comparo si tienen el mismo largo */
comparal(diccionario, cadena,aux1,&pos); /* si son = comparo las letras una x una */
else
pasar_letra(diccionario,&pos); /* si no tiene la misma cant. paso a la pal siguiente
en dicc */
}
if (aux1[0]!='\0') /* si encontro alguna(s) palabra(s) entonces la(s) muestro(s) */
printf("%s",aux1);
else
printf("No se encontro ninguna palabra en el diccionario.\n");
return 0;
}
/* Verifica si tiene la misma cantidad de letras */
int comparac (char diccionario [M], char cadena [N], int pos)
{
int i=0; // para la cadena
int j=pos; // para el diccionario
while (diccionario[j] != ',' && cadena[i] != '\0')
{
j++;
i++;
}
if ((diccionario [j] == ',' && cadena[i] == '\0'))
return 1; //la cantidad de letras es igual en ambos
else
return 0; //la cantidad de letras es distinta en ambos
}
/* compara las letras entre la cadena y el diccionario apartir de la posicion de dicc
y la concatena en aux1 donde se guardan todas las palabras validas */
void comparal (char diccionario [M], char cadena[N], char aux1[M], int* pos)
{
int i=0;
int j=*pos, k=0;
int cont=0;
char aux[9], auxcadena[9];
strcpy(auxcadena,cadena);
while ((auxcadena[i]!='\0') && (diccionario[j]!=','))
{
if (diccionario[j]==auxcadena[i])
{
aux[k] = auxcadena[i];
auxcadena[i] = '@';
j++;
*pos=j;
i=0;
k++;
}
else
i++;
}
aux[k]='\0';
if ((auxcadena[i]=='@') && (diccionario[j]==',')) /* tonces esa palabra coincidia */
{
strcat(aux1, " ");
strcat(aux1, aux);
}
pasar_letra(diccionario, pos);
}
/* pasa de palabra en diccionario para comparar la proxima */
void pasar_letra (char diccionario [M], int* pos)
{
while (diccionario[*pos]!= ',')
(*pos)++;
(*pos)++;
}
/* saca el enter */
void sacar_en (char *cadena)
{
while(*cadena!='\0' && *cadena!='\n')
cadena++;
*cadena='\0';
}
|