IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème avec une liste


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème avec une liste
    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 :
    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;
    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
    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;
    }
    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
    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 :
    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 remarque que le segment de ptrTeteListe change à chaque passage dans la boucle alors que je ne lui ai rien demandé...

    Je vous remercie par avance de vos réponses et du temps que vous aurez consacré à mon problème.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Si l'objectif n'est pas de programmer les listes alors utilise std::list de la librairie standard qui t'allègera de tous ces problèmes. Idem pour les chaînes de caractères, privilégie std::string.

    Sinon,
    Pas besoin de typedef lorsque tu déclares une structure en C++ et pas besoin de rappeler struct nom_struct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct listeSegment 
    {
        char * segment;
        ListeMot * listeMot;
        listeSegment * segmentSuivant;
    };
    Pour comparer des chaînes de caractères std::string alors oui l'opérateur '==' fonctionne. Mais pour des chaînes 'C' (char*) alors tu ne compares que les adresses avec '=='. Utilises strncmp avec des char*.
    Quand au fait que segment change à chaque fois, ben ksegment n'est alloué qu'à l'extérieur de la boucle et c'est celui qui est assigné à chaque segment de chaque élément de ta liste. Donc normale que sa modification se répercute sur l'ensemble des éléments.

    Écrits ton algo sur papier et utilises des std::list et std::string cela devrait mieux se passer.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut merci
    Merci bien de ta réponse, ça m'a beaucoup aidé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD10]Problème avec une liste
    Par Louis Griffont dans le forum WinDev
    Réponses: 11
    Dernier message: 25/05/2007, 08h40
  2. Problème avec une liste chainée
    Par 0v3rb1t dans le forum C
    Réponses: 3
    Dernier message: 08/05/2007, 19h27
  3. Problème avec une liste.
    Par Baban29 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/04/2007, 12h12
  4. STL Problème avec une liste d'instances de class
    Par BruceBoc dans le forum SL & STL
    Réponses: 12
    Dernier message: 16/02/2007, 14h12
  5. [Débutant] problème avec une liste déroulante
    Par stan21 dans le forum Access
    Réponses: 3
    Dernier message: 12/07/2006, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo