esercizio.h
#ifndef ESERCIZIO_H_INCLUDED
#define ESERCIZIO_H_INCLUDED
typedef struct listapuntata {
char *str;
struct listapuntata *next;
}listapuntata;
listapuntata *inserimento(listapuntata *lista, char *stringa);
char * leggi (void);
void stampa(listapuntata *lista);
listapuntata *cancellatutto(listapuntata *lista);
listapuntata *cancella(listapuntata *lista, char *elem);
listapuntata *cancellaparticolare(listapuntata *lista, int x, char *a, char *b);
#endif // ESERCIZIO_H_INCLUDED
esercizio.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "esercizio.h"
char * leggi (void) {
char *s = (char *)malloc(80*sizeof(char));
scanf ("%s",s);
return s;
}
listapuntata *inserimento(listapuntata *lista, char *elem) {
if((lista==NULL) || ((strlen(lista->str))>(strlen(elem)))) {
listapuntata *tmp=(listapuntata *)malloc(sizeof(listapuntata));
tmp->str=elem;
tmp->next=lista;
return tmp;
} else {
lista->next=inserimento(lista->next,elem);
return lista;
}
}
void stampa(listapuntata *lista) {
if (lista != NULL) {
printf(" %s\n",lista->str);
stampa(lista->next);
} else {
return;
}
}
listapuntata *cancellatutto(listapuntata *lista) {
if (lista!=NULL)
lista=cancellatutto(lista->next);
return lista;
}
listapuntata *cancella(listapuntata *lista, char *elem) {
int val;
if (lista!=NULL) {
val=strcmp((lista->str),elem);
if ( val!=0 ) {
lista->next=cancella(lista->next,elem);
} else if (val==0) {
printf("TROVATA\n");
listapuntata *tmp=(listapuntata *)malloc(sizeof(listapuntata));
tmp=lista;
lista=tmp->next;
free(tmp);
}
}
return lista;
}
listapuntata *cancellaparticolare(listapuntata *lista, int x, char *a, char *b) {
int val,lung;
if (lista!=NULL) {
lung=(strlen(lista->str))-x;
if (((lung%2) == 0) && ( (strlen(a)) < (strlen(lista->str)) < (strlen(b)))) {
printf("TROVATA\n");
listapuntata *tmp=(listapuntata *)malloc(sizeof(listapuntata));
tmp=lista;
lista=tmp->next;
free(tmp);
}
lista->next=cancellaparticolare(lista->next,x,a,b);
}
return lista;
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include "esercizio.h"
int main() {
int i;
char *stringa,*a, *b;
struct listapuntata *lista;
stringa = (char *)calloc(100, sizeof(char));
a = (char *)calloc(100, sizeof(char));
b= (char *)calloc(100, sizeof(char));
lista=NULL;
//stringa="due";
stringa=leggi();
lista=inserimento(lista,stringa);
//stringa="amore";
stringa=leggi();
lista=inserimento(lista,stringa);
//stringa="ciao";
stringa=leggi();
lista=inserimento(lista,stringa);
//stringa="un";
stringa=leggi();
lista=inserimento(lista,stringa);
system("PAUSE");
printf("La lista: \n");
stampa(lista);
printf("Inserisci x: ");
scanf("%d", &i);
a="un";
b="amore";
lista=cancellaparticolare(lista,i,a,b);
stampa(lista);
printf("\t\t*****FINE******\n");
system("PAUSE");
return 0;
}
Anche se ti ripeto che così non separi la libreria dal client.