Supprimer des doublons dans un tableau [Résolu]

Signaler
Messages postés
3
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
3 décembre 2010
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,

je voudrais savoir, comment faire pour supprimer des doublons
dans un tableau non trié en C ?

t = {1,3,4,2,5,4,5}

Doublons à supprimer : 4 et 5

Résultat : t = {1,3,4,2,5}

Merci d'avance,

Aurel

2 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Exemple de méthode bien bourrin avec préservation de l'ordre original.

char szappname[] = "NoTri";

DWORD remDoublons(DWORD *ptb, DWORD count)
{
  DWORD w, r, i, a;
  if(count < 2) return count;
  w = 1; // INDEX ECRITURE
  r = 1; // INDEX LECTURE
nextELEM:
  a = ptb[r];
  for(i 0; i < r; i++) if(a ptb[i]) goto incrPOS;
  ptb[w++] = a;
incrPOS:
  if(++r < count) goto nextELEM;
  return w;
}

void tstDoublonSansTri()
{
  char buf[120], *c;
  DWORD tab[20];
  DWORD i, n;
  // INIT DU TABLEAU
  for(i 0; i < 20; i++) tab[i] i;
  // QUELQUES DOUBLONS
  tab[1] = 3;
  tab[6] = 3;
  tab[10] = 16;
  tab[12] = 16;
  
  // AFFICHAGE TABLEAU ORIGINAL
  c = buf;
  for(i = 0; i < 20; i++) {
    c = bnultoa(tab[i], c);
    *c++ = 10;
  }
  *(c - 1) = 0;
  MessageBox(0, buf, szappname, 0);
  
  n = remDoublons(tab, 20);
  if(!n) return;
  // AFFICHAGE TABLEAU RESTANT
  c = buf;
  for(i = 0; i < n; i++) {
    c = bnultoa(tab[i], c);
    *c++ = 10;
  }
  *(c - 1) = 0;
  MessageBox(0, buf, szappname, 0);
}



ciao...
BruNews, MVP VC++
Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Statut
Membre
Dernière intervention
11 décembre 2011

Pour ma part je te conseil d'utiliser un vecteur d'entier pour faire ceci assez facilement.

Ciao