Bonjour à tous,
voiçi mon problème :
Je réalise un projet informatique pour mes études et je suis coincé par un problème dont je n'arrive pas à me découdre, je vous explique :
il s'agit pour l'instant de créer une liste contenant tous les k-segments d'un mot.
j'ai la structure de données suivante pour ma liste :
j'ai ensuite ma fameuse fonction pour construire cette liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct listeSegment { char * segment; ListeMot * listeMot; struct listeSegment * segmentSuivant; }ListeSegment;
avec la fonction qui vérifie que le segment n'est pas déjà dans la liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 ListeSegment * constructListeSegment(int k,char * query) { ListeSegment * listeSegment = new ListeSegment; ListeSegment * ptrTeteListe = listeSegment; listeSegment->segmentSuivant = NULL; int longueur = strlen(query); char * ksegment = new char[longueur]; int j; for(int i = 0;i < longueur - (k-1);i ++) { j = 0; for(int l = i;l < i+k;l ++) { ksegment[j] = query[l]; j ++; } ksegment[j] = '\0'; //on gère le cas où on aurait des doublets if(!estDansListe(ptrTeteListe,ksegment) || i == 0) { listeSegment->segment = ksegment; listeSegment->segmentSuivant = new ListeSegment; listeSegment = listeSegment->segmentSuivant; listeSegment->segmentSuivant = NULL; } } return ptrTeteListe; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 bool estDansListe(ListeSegment * liste,char * mot) { ListeSegment * parcoursListe = liste; while(parcoursListe != NULL) { if(parcoursListe->segment == mot) return true; parcoursListe = parcoursListe->segmentSuivant; } return false; }
à mon grand étonnement, ça n'a pas marché.
J'ai pu constater un souci vraiment bizarre en essayant de débugger avec des affichage dans la console :
Si je rajoute un printf dans la boucle for qui crée mon segment ksegment comme ceci :
je remarque que le segment de ptrTeteListe change à chaque passage dans la boucle alors que je ne lui ai rien demandé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for(int l = i;l < i+k;l ++) { if(i > 0) printf("ptrTeteListe [%d] [%d] : %s\n",j,i,ptrTeteListe->segment); ksegment[j] = query[l]; j ++; }
Je vous remercie par avance de vos réponses et du temps que vous aurez consacré à mon problème.
Partager