Gracias de antemanooo!!!
![Adios](http://static.forosdelweb.com/fdwtheme/images/smilies/adios.gif)
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,cosita,colorado"; char cadena [N]; char aux1[M]; int pos= 0; char *aux11=aux1; aux1[0]='#'; /* si no llega a haber palabra valida entonces el · siempre esta en la 1º pos */ printf ("Ingrese una cadena de caracteres: "); fgets (cadena,N,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,aux11, &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]!='#') /* si encontro alguna(s) palabra(s) entonces la(s) muestro(s) */ printf("%s",aux1); else printf("No se encontro ninguna palabra en el diccionario."); return 0; } int comparac (char diccionario [M], char cadena [N], int pos) { int i=0; // para la cadena int j=pos; // para el diccionario while (i<N) { if ((diccionario[j]!= ',') && (cadena[i]!='\0')) { j++; i++; } 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 } void comparal (char diccionario [M], char cadena[N], char aux1[], int* pos) { int i=0; int j=*pos; char aux[9]; while ((cadena[i]!='\0') && (diccionario[j]!=',')) { if (diccionario[j]==cadena[i]) /* comparo si la letra en cadena es = a la de dicc */ { aux[j] = cadena[i]; /* si es igual la guardo en la aux */ cadena[i] = '@'; /* y la "saco" de cadena para que no la compare de nuevo */ j++; *pos=j; } i++; } if ((cadena[i]!='\0') && (diccionario[j]!=',')) /* entonces esa palabra coincidia */ { i=0; if (diccionario[j]==',') (*pos)++; while (i!='\0') /* la copio en aux1 */ { aux1[i]=aux[i]; i++; } aux1[i]='\b'; /* separo las palabras con espacio */ } pasar_letra(diccionario, pos); /* paso para comparar la palabra sig en dicc */ intercambiar(cadena, aux); /* vuelvo a incluir todas las letras en la cadena para comparar con las otras */ } void pasar_letra (char diccionario [M], int* pos) { while (diccionario[*pos]!= ',') (*pos)++; (*pos)++; } void intercambiar (char cadena[N], char aux[M]) { int i=0; int j=0; while (cadena[i]!='\0' && aux[j]!='\0') /* cambio los @ x las letras que corresponden */ { if (cadena[i]=='@') { cadena[i]=aux[j]; j++; } i++; } } void sacar_en (char *cadena) /* saca los espacios y el enter */ { while(*cadena!='\0' && *cadena!='\n') cadena++; *cadena='\0'; }