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);
}