Supprimer des doublons dans un tableau [Résolu]

Messages postés
3
Date d'inscription
dimanche 12 novembre 2006
Dernière intervention
3 décembre 2010
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 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 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
3
Merci
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++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Dernière intervention
11 décembre 2011
0
Merci
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.