Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/04/2005, 16:00
Avatar de loka-por-racing
loka-por-racing
 
Fecha de Ingreso: noviembre-2002
Ubicación: buenos aires
Mensajes: 55
Antigüedad: 21 años, 6 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';
}