Corregir un string de struct con puntero a sig (C)
Publicado por Iyov (2 intervenciones) el 20/09/2007 20:03:04
creo k mi error es uno de punteros
tengo k hacer un diccionario, osea tengo k pescar una txt leerlo e insertarlo en una lista enlasada grabando cada palabra en un lista->elem
kiero hacer una funcion para corregir los elemetos (especificamente una palabra llamada lista->elem) de una lista (una struct con puntero al siguiente)
la funcion debe buscar las variaciones de las palabras, es decir, eliminará las terminaciones en ‘s’, ‘es’, ‘ing’ o ‘ed’.
osea cree una funcion k me lee desde un archivo cada palabra y me la asigna a lista->elem, pero ahora tengo problemas con hacer la correcion de estas palabras ya k
palabras como thising, ending, etc son palabras k tengo el mi diccionario y kiero cortarles el "ing", "ed", "es" o "s" antes de empesar a comparar con los archivos de diccionario
los archivos de diccionario son 2 txt k tienen palabras y son objeto de comparacion solamente
mi idea es esta
(en el ing explike todo...las otras terminaciones son analogas)
la lista es asi
struct a
{
char elem[24];
struct a *siguiente;
};
typedef struct nodo lista;
lista *corregir_lista(lista *testfile)
{
lista *aux;
aux=(lista *)malloc(sizeof(lista));
aux=testfile;
int i,cont,j;
char a[20];
while(aux != NULL)
{
i=strlen(aux->elem) - 1;
cont=j=0;
//aka hacer una funcion k borre todo lo k el arreglo a[20] pudo haber grabado de la asignacion anterior
if(aux->elem[i] == 'g' && aux->elem[i-1] == 'n' && aux->elem[i-2] == 'i') //encuentra la terminacion "ing" de la palabra
{
//con strncpy copio la palabra k esta en el la lista al arreglo a con una delimitante de 3 posiciones atras, osea copio todo lo k esta antes de ing
strncpy(a, aux->elem, i-2);
//ahora viene mi conflicto, necesito hacer k lo k copie en el arreglo "a" (osea la palabra bn escrita), dejarlo nuevamente en el l->elem
//para ello, necesito borrar todo lo k tenia grabado en l->elem y despues con el arreglo limpio, copiar lo k guarde en el arreglo "a" en l->elem
//asi voy a corregir el elemeto de la lista
strcpy(aux->elem, a);
aux->siguiente = (lista *)malloc(sizeof(lista));
aux = aux->siguiente;
}
else
{
if(aux->elem[i] == 'd' && aux->elem[i-1] == 'e')
{
strncpy(a, aux->elem, i-1);
strcpy(aux->elem, a);
aux->siguiente=(lista *)malloc(sizeof(lista));
aux = aux->siguiente;
}
else
{
if(aux->elem[i] == 's')
{
if(aux->elem[i-1] == 'e')
{
strncpy(a, aux->elem, i-2);
strcpy(aux->elem, a);
aux->siguiente=(lista *)malloc(sizeof(lista));
aux =aux->siguiente;
}
}
else
{
strncpy(a, aux->elem, i-2);
strcpy(aux->elem, a);
aux->siguiente=(lista *)malloc(sizeof(lista));
aux =aux->siguiente;
}
}
}
aux->siguiente=(lista *)malloc(sizeof(lista));
aux = aux->siguiente;
}
si no entienden algo...pregunten no mas
de antemano agradesco cualkier aporte...
= lo necesito urgente
salu2
shalom!!!
tengo k hacer un diccionario, osea tengo k pescar una txt leerlo e insertarlo en una lista enlasada grabando cada palabra en un lista->elem
kiero hacer una funcion para corregir los elemetos (especificamente una palabra llamada lista->elem) de una lista (una struct con puntero al siguiente)
la funcion debe buscar las variaciones de las palabras, es decir, eliminará las terminaciones en ‘s’, ‘es’, ‘ing’ o ‘ed’.
osea cree una funcion k me lee desde un archivo cada palabra y me la asigna a lista->elem, pero ahora tengo problemas con hacer la correcion de estas palabras ya k
palabras como thising, ending, etc son palabras k tengo el mi diccionario y kiero cortarles el "ing", "ed", "es" o "s" antes de empesar a comparar con los archivos de diccionario
los archivos de diccionario son 2 txt k tienen palabras y son objeto de comparacion solamente
mi idea es esta
(en el ing explike todo...las otras terminaciones son analogas)
la lista es asi
struct a
{
char elem[24];
struct a *siguiente;
};
typedef struct nodo lista;
lista *corregir_lista(lista *testfile)
{
lista *aux;
aux=(lista *)malloc(sizeof(lista));
aux=testfile;
int i,cont,j;
char a[20];
while(aux != NULL)
{
i=strlen(aux->elem) - 1;
cont=j=0;
//aka hacer una funcion k borre todo lo k el arreglo a[20] pudo haber grabado de la asignacion anterior
if(aux->elem[i] == 'g' && aux->elem[i-1] == 'n' && aux->elem[i-2] == 'i') //encuentra la terminacion "ing" de la palabra
{
//con strncpy copio la palabra k esta en el la lista al arreglo a con una delimitante de 3 posiciones atras, osea copio todo lo k esta antes de ing
strncpy(a, aux->elem, i-2);
//ahora viene mi conflicto, necesito hacer k lo k copie en el arreglo "a" (osea la palabra bn escrita), dejarlo nuevamente en el l->elem
//para ello, necesito borrar todo lo k tenia grabado en l->elem y despues con el arreglo limpio, copiar lo k guarde en el arreglo "a" en l->elem
//asi voy a corregir el elemeto de la lista
strcpy(aux->elem, a);
aux->siguiente = (lista *)malloc(sizeof(lista));
aux = aux->siguiente;
}
else
{
if(aux->elem[i] == 'd' && aux->elem[i-1] == 'e')
{
strncpy(a, aux->elem, i-1);
strcpy(aux->elem, a);
aux->siguiente=(lista *)malloc(sizeof(lista));
aux = aux->siguiente;
}
else
{
if(aux->elem[i] == 's')
{
if(aux->elem[i-1] == 'e')
{
strncpy(a, aux->elem, i-2);
strcpy(aux->elem, a);
aux->siguiente=(lista *)malloc(sizeof(lista));
aux =aux->siguiente;
}
}
else
{
strncpy(a, aux->elem, i-2);
strcpy(aux->elem, a);
aux->siguiente=(lista *)malloc(sizeof(lista));
aux =aux->siguiente;
}
}
}
aux->siguiente=(lista *)malloc(sizeof(lista));
aux = aux->siguiente;
}
si no entienden algo...pregunten no mas
de antemano agradesco cualkier aporte...
= lo necesito urgente
salu2
shalom!!!
Valora esta pregunta


0