C/Visual C - Corregir un string de struct con puntero a sig (C)

 
Vista:

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!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Corregir un string de struct con puntero a sig

Publicado por klaytor (2 intervenciones) el 21/09/2007 11:23:33
Hola. Echando un vistazo rápido a tu programa creo que puedo aconsejarte un par de cosas.

Teniendo presente que los arrays en C vienen siendo punteros yo creo que estas funciones puede resultarte de gran utilidad:

int memcmp(const void *s1, const void *s2, size_t n);
- Compara los primeros n caracteres del objeto apuntado por s1 (interpretado como unsigned char) con los primeros n caracteres del objeto apuntado por s2 (interpretado como unsigned char). Si la función devuelve un cero resulta que los strings s1 y s2 son iguales.

void *memcpy(void *s1, const void *s2, size_t n);
- Copia los primeros n caracteres del objeto apuntado por s2 al objeto apuntado por s1. Devuelve un puntero a s2.

Por último, si añades un campo 'longitud' a los nodos de la lista que te indique el número de caracteres de l elemento almacenado en ese nodo, yo creo que podría facilitarte las cosas. Por ejemplo, no tendrías que borrar el campo elem.

Espero que te sirva de ayuda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corregir un string de struct con puntero a sig

Publicado por Iyov (2 intervenciones) el 21/09/2007 20:56:35
muchas gracias de todas formas
ya solucione ese problema
shalom!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar