Hola.. hice un programa en C q busca en un diccionario (string de char) q ya esta predeterminado (x ahora con pocas palabras) si esta la secuencia de palabras desordenadas q ingresa el usuario en el dicc. digamos q si escribe x ej. asca y en el dicc esta casa .. entonces la muestre por pantalla y asi con todas las del dicc. Pero no me encuentra ninguna.. y no se como hacer.. x ahi no me modifica o no recorre los strings.. y no se q hacer.... Si alguien me puede ayudar se los agradeceriaa!!!! aca les dejo el cod.
Gracias de antemanooo!!!
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';
}