Supprimer des doublons dans un tableau [Résolu]

cs_aurel_67_1 3 Messages postés dimanche 12 novembre 2006Date d'inscription 3 décembre 2010 Dernière intervention - 2 déc. 2010 à 20:49 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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
Afficher la suite 

2 réponses

Répondre au sujet
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 3 déc. 2010 à 09:58
+3
Utile
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++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
cs_TeniX 118 Messages postés mercredi 24 décembre 2003Date d'inscription 11 décembre 2011 Dernière intervention - 3 déc. 2010 à 07:10
0
Utile
Pour ma part je te conseil d'utiliser un vecteur d'entier pour faire ceci assez facilement.

Ciao
Commenter la réponse de cs_TeniX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.