Eliminare occorrenze da testo libero con una lista

di il
2 risposte

Eliminare occorrenze da testo libero con una lista

Salve a tutti!! volevo dei pareri riguardo questo mio programma per eliminare le occorrenze da un testo libero sembra funzionare bene.
forse potrebbero presentarsi degli errori qualche piccolo bug o robe simili per questo ho chiesto pareri e/o consigli

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

/*------------------------------------------------NODO----------*/
typedef struct Snodo{
    char par[25];
    struct Snodo* next;
}Tnodo;

/*------------------------------------------------PUNTATORE AL NODO----------*/

typedef Tnodo* Pnodo;


/*------------------------------------------------LISTA----------*/

typedef struct Slista{
    Pnodo testa;
}Tlista;

/*------------------------------------------------PROTOTIPI FUNZIONI----------*/
Tlista crealista();
Tlista aggiungiInTesta(Tlista l,char* T);
void stampalista(Pnodo p);
void eliminaOcoorrenze(Tlista l);
void verificaDuplicati(Pnodo pun);
void stampalista2(Pnodo p);
/*------------------------------------------------MAIN----------*/

int main()
{
    Tlista l;
    char testo[2000];
    char* token;

    /*inserimento testo libero */
    printf("inserire un testo libero massimo 2000 caratteri:\n");
    gets(testo);

    l=crealista();

    /*dividere testo in token e aggiunta in testa */
    token=strtok(testo," ");
    while(token!=NULL){
        l=aggiungiInTesta(l,token);
        token=strtok(NULL," ");
    }
    /*stampa di prova*/
    printf("\nstampa di prova:\n");
    stampalista(l.testa);

    eliminaOcoorrenze(l);

    /*stampa finale*/
    printf("\n\nstampa senza occorrenze:\n");
    stampalista2(l.testa);

    printf("\n\n");
    return 0;
}
/*------------------------------------------------IMPLEMENTO FUNZIONI----------*/
Tlista crealista(){
    Tlista ris;
    ris.testa=NULL;
    return ris;
}
Tlista aggiungiInTesta(Tlista l,char* T){
    Pnodo nuovonodo;
    /*allocazione nuovo nodo*/
    nuovonodo=malloc(sizeof(Tnodo));
    /*inserimento valore nodo*/
    strcpy(nuovonodo->par, T);
    /*aggiornamento puntatori*/
    nuovonodo->next=l.testa;
    l.testa=nuovonodo;
    return l;
}

void stampalista(Pnodo p) {
    if(p == NULL)
        return;
    stampalista(p->next);
    printf("%s ", p->par);
}

void eliminaOcoorrenze(Tlista l){
    Pnodo p1;
    p1=l.testa;

    while(p1!=NULL){
        verificaDuplicati(p1->par);
        p1=p1->next;

    }

}

void verificaDuplicati(Pnodo pun){
   Pnodo p2,prec,succ;
   p2=pun;
   prec=pun;
   p2=p2->next;
    while(p2!=NULL && prec!=NULL){
        if(strcmp(p2->par,pun)==0){
            succ=p2->next;
            free(p2->par);
            prec->next=succ->par;
        }
        prec=p2->par;
        p2=p2->next;

    }


}

void stampalista2(Pnodo p) {
    if(p == NULL)
        return;
    stampalista2(p->next);
    printf("%s ", p->par);
}

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte