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 :

Supression de doublon dans un tableau


Sujet :

C

  1. #1
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut Supression de doublon dans un tableau
    Bonjour,

    Je dois dans un tableau pouvant contenir plusieurs fois des mêmes valeur faire le trie et supprimé tous les doublons.

    J'ai pensé a parcourir ce tableau dans une boucle for, copier la permiere valeur dans un tableau temporaire pour ensuite faire une comparaison avec les autres valeur du premier tableau.
    Mais ca ne marche pas vraiment...

    Avez vous une solution un conseil?

    Merci.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Blo0d4x3
    Mais ca ne marche pas vraiment...
    Qu'est-ce qui ne 'marche pas' ? On est censés aller hacker ton disque pour avoir le code ?

  3. #3
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut
    J'aurai voulu un algo, plutot que de vous debbuger mon code en faite.

    Voila ce que j'ai fais:

    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
    33
    34
     
    void trie(char *IP[], int cpt)
    {
      int i=0, j=0, nbip=0;
      char *IP2[NB_IP];
      int flgDoublon=0;
     
       for(i=0; i < cpt; i++)
      {
        flgDoublon=0;
     
        for(j=0; j < nbip; j++)
        {
          printf("\cmp\n");
     
          if( ( strcmp(IP[i], IP2[j]) ) == 0 )
          {
            printf ("Doublon\n");
            flgDoublon=1;
            j=nbip;
          }
        }
     
        if(flgDoublon==0)
        {
          printf("Aucun doublon, nbip; %d\n", nbip);
          IP2[nbip]=IP[i];
          nbip++;
          //strcpy(IP2[nbip], IP[i]);
        }
     
       }
     
    }
    Ca a l'air de fonctionner, c'était le strcpy qui n'amait pas. Si vous une meilleure méthode de le faire, ou une critique, je vous écoute.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Par défaut
    Bonjour,

    Je n'ai pas tout saisi à ton code mais il y a quelque chose qui me paraît louche, IP2[0] n'est pas initialisé quand tu rentres pour les premières fois dans tes 2 boucles "for" et tu fais une comparaison "strcmp" avec.

    Si il t'est possible de trier ton tableau, moi j'utiliserais d'abord un algorithme de tri puis je supprimerais les doublons en lisant mon tableau une fois à la fin.
    Je ne garantis pour que ce soi plus performant, mais au moins les algorithmes de tri sont légions, donc tu en trouveras certainement un qui a déjà été codé en C.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ok je te donne un algo :

    2 variables Continuer et I_Depart
    3 indices i, j, k


    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
    33
    Initialiser Continuer à 1
    Initialiser I_depart à 0
     
    Tant que Continuer = 1
     
       Mettre Continuer à 0
     
       pour i = I_Depart à i < (N-1)
          pour j = (i+1) à j <  N       
     
               si  table[j] = table[i]
                    I_Depart = i
     
                    si j < (N-1)
                         pour k = (j+1) à k < N
                             table[k-1] = table[k]
                         fin pour
                    fin si
     
                    N = N - 1
                    Continuer = 1
                    Sortir de boucle j
                 fin si
     
           fin pour j
     
           si Continuer = 1
                Sortir de boucle i
           fin si
     
        fin pour i
     
    fin tant que

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2007, 18h29
  2. [Tableaux] Rechercher les doublons dans un tableau
    Par jym_22 dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2006, 09h47
  3. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 18h04
  4. Eliminer les doublons dans un tableau d'entiers
    Par engi dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 21/03/2006, 13h59
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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