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 

Votre réponse

2 réponses

Meilleure 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
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

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
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.