Supprimer des doublons dans un tableau

Résolu
cs_aurel_67_1 Messages postés 3 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 3 décembre 2010 - 2 déc. 2010 à 20:49
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 3 déc. 2010 à 09:58
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 déc. 2010 à 09:58
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++
3
cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 2
3 déc. 2010 à 07:10
Pour ma part je te conseil d'utiliser un vecteur d'entier pour faire ceci assez facilement.

Ciao
0
Rejoignez-nous