ok allora mi spiego meglio data
# include<stdio.h>
# include<stdlib.h>
# include<time.h>
# include<string.h>

/*
STRUTTURA DATI CHE IMPLEMENTA I TRENI MERCI
*/
struct listaTreniMerci2 {
char nome[40];
char sequenza[40];
struct listaTreniMerci2 *next;
};

/*
PUNTATORI ALLA LISTA CONTENTE I TRENI
*/
struct listaTreniMerci2 *treniMerci2, *sequenze;
/*
Funzione inserisci
Questa funzione inserisce nella lista dei treni un nuovo treno, il cui nome e
la cui struttura sono definiti dalla stringa passata in input, restituendo il
puntatore alla lista dei treni.
Nel caso sia già presente un treno dello stesso nome di quello passato dalla
stringa di input non viene compiuta alcuna operazione.
*/
struct listaTreniMerci2 *inserisci(char *alfa, char *w, struct listaTreniMerci2 *tmp){
struct listaTreniMerci2 *p1, *p2, *t;
t=(struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
strcpy(t->nome, alfa);
strcpy(t->sequenza, w);
t->next=NULL;
if (tmp == NULL)
return(t);
p1=tmp;
p2=tmp;
while (p1 != NULL && (strcmp(p1->nome, alfa) != 0)) {
if (strcmp(p1->sequenza, w) > 0) {
if (p1 == tmp) {
t->next=p1;
tmp=t;
return(tmp);
}
else {
while (p2->next != p1)
p2=p2->next;
t->next=p1;
p2->next=t;
return(tmp);
}
}
else
p1 = p1->next;
}
if (p1 == NULL){
while(p2->next != NULL)
p2=p2->next;
p2->next=t;
}
return(tmp);
}
/*
Procedura somiglianza
Stampa il grado di somiglianza dei treni di nome alfa e beta.
*/
/*void somiglianza(char * alfa, char *beta){
struct listaTreniMerci2 *tmp, *tmp2;
int result;
char alfa_tmp[40], beta_tmp[40];
tmp=treniMerci2;
tmp2=treniMerci2;
if((tmp != NULL) && (strcmp(tmp->nome,alfa) !=0)){
printf(">Non è presente il primo treno! \n");
return;
}
if((tmp2 != NULL) && (strcmp(tmp2->nome, beta)!=0)){
printf(">Non è presente il secondo treno! \n");
return;
}
alfa_tmp= tmp->sequenza;
beta_tmp= tmp2->sequenza;
result = strcmp (alfa_tmp, beta_tmp)
printf(">%d\n",result);
}

/*
Procedura stampasomiglianza
Stampa in ordine lessicografico secondo le sequenze di vagoni tutti i treni
che hanno grado di somiglianza n con alfa, come nome del treno.
*/
/*void stampasomiglianza(char *alfa, int n){
struct listaTreniMerci2 *tmp;
tmp = treniMerci2;
if (tmp == NULL) {
printf(">Non sono presenti treni! \n");
return;
}

if (n) {

printf(">%s", tmp->nome);
printf(" %s\n", tmp->sequenza);
tmp = tmp->next;
}
else {
printf("Nessun treno ha somiglianza %d", n);
printf("con %s\n", alfa);
}
}
void scegliFunzione(){

char alfa[40], beta[40], w[40];
int n;
char tastoScelto;
char c;
scanf("%c", &c);
while (c != 'f') {
switch(c){
case 'i': scanf("%s", &alfa);
scanf("%s", &w);
treniMerci2=inserisci(alfa, w, treniMerci2);
scanf("%c", &tastoScelto);
break;
case 'm': scanf("%s", &alfa);
scanf("%s", &beta);
somiglianza(alfa, beta);
scanf("%c", &tastoScelto);
break;

}
scanf("%c", &c);
}
return;
}

/*
Funzione main
La funzione principale del programma che inizializza i puntatori alle liste e
invoca la procedura scegliFunzione.
*/
int main(){
treniMerci2 = (struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
treniMerci2 = NULL;
sequenze = (struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
sequenze = NULL;
scegliFunzione();
return 0;
}
inseriti due treniMerci alfa e beta con le loro sequenze con
i alfa AAUUI
i beta AAUIP
la funzione somiglianza richiamata con
con
m alfa beta
dovrebbe stamparmi 3
cioè la massima lunghezza della sequenza dei primi caratteri comuni sia alla sequenza del treno di nome alfa e sequenza AAUUI sia alla sequenza del treno di nome beta e sequenza AAUIP
il problema e che nel mio codice non so come
- rifermi al membro sequenza di ogni singolo treno attraverso i puntatori per poterli confrontare
- se strcmp mi ritorna l'intero che corrisponda alla massima lunghezza dei primi caratteri comuni
alle due sequenze
qualcuno può aiutarmi grazie