éliminer les doublons ! [Résolu]

Messages postés
26
Date d'inscription
jeudi 11 novembre 2004
Dernière intervention
29 octobre 2009
- - Dernière réponse : jekburn
Messages postés
26
Date d'inscription
jeudi 11 novembre 2004
Dernière intervention
29 octobre 2009
- 29 oct. 2009 à 11:44
Bonsoir,

J'ai demandé de l'aide y'a 2 semaines, mais là je suis toujours bloqué !
Please help !
Je cherche à supprimer les doublons que me sort mon programme par n'importe quelle méthode.

Merci de votre aide

windows vista, dev c++




#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.c>

#define FileName "mail.txt" //fichier 65500 ligne max
#define FileName2 "ordre.txt"

char mail[1024];
int randi(int Min, int Max);

int main(int argc, char *argv[], char *envp[]){
int Number;
int Longueur=7;
int i,j;
char *temp;

printf("Nombre de Mail a generer: ");
scanf("%d", &Number);

FILE *File;File=fopen(FileName,"w");
FILE *File2;File2=fopen(FileName2,"w");

for (i=1; i<=Number; i++){
for (j=0; j<Longueur; j++){
switch(randi(1,2)){
case 1 : mail[j]=(char)randi(45,46); break;// symbole négatif
case 2 : mail[j]=(char)randi(95,122);break;
}

}
printf("%s\n",mail);// affiche à l'écran en désordre
//fprintf(File, "%s%s\%s\n", mail);// enregistre dans le fichier en désordre
}
fclose(File);fclose(File2);
system("sort mail.txt>>ordre.txt");//classe par ordre alpha
getch();

}

int randi(int Min, int Max){
return ( Min + ( rand() % (Max - Min+1) ) );
}
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
16 août 2012
3
Merci
Salut,

J'ai dû modifier les lignes suivantes pour faire marcher ton programme sur mon pc :

#include <conio.h> //au lieu de #include <conio.c>

fprintf(File, "%s\n%s\n", mail , mail );// enregistre dans le fichier en désordre

//l'option -u permet de gérer l'unicité
system("sort -u mail.txt>>ordre.txt");//classe par ordre alpha


Bonne continuation.

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Lucky92
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
16 août 2012
3
Merci
Attention le "sort" n'est pas celui de windows, c'est la commande gnu.
Tu peux le récupérer dans une "install" de cygwin par exemple.

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Lucky92
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
Plutôt que de faire des trucs gores à coup de "system", il te suffit de coder une fonction sort() qui tri une liste.
Coder une fonction sort n'est pas super dur (regarde tri à bulle, tri insertion, quick sort).
Pour supprimer les doublons, il suffit de mettre chacun des mails générés dans un tableau à chaque fois, et lorsque tu génères un mail, tu vérifies au préalable qu'il n'existe pas dans la liste.

Ne met pas tout dans le fichier, mais génère tes mail dans un tableau. Une fois le tableau trié (il n'y aura pas de doublons si tu vérifies à chaque fois), tu recopies les informations du tableau dans un fichier.

Tu dis développer sous dev-c++, tu fais du C ou du C++ ? En C++, les conteneurs de la STL feraient ce travail pour toi :)

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
En C++ ça donnerais ça:

- Utilisations du conteneur std::set (qui ne fait pas de doublons et tris automatiquement)
- Génération de mail et insertion dans le set
- Recopie du set dans un fichier

Le code (compilé avec gcc sous linux, a peut être adapter légèrement pour windows):
#include 
#include 
#include <set>
#include <cstdlib>
#include <fstream>

/*!
** Get a random number between min and max
**
** @param min The lower limit
** @param max The upper limit
**
** @return A random number
*/
int randi(int min, int max)
{
  return (min + (rand() % (max - min + 1)));
}

/*!
** Generate mail with a given size
**
** @param longueur The size of the mail
**
** @return A random mail
*/
std::string generateMail(int longueur)
{
  char mail[32] = {0};

  for (int j = 0; j < longueur; ++j)
    switch (randi(1, 2))
    {
      case 1:
mail[j] = randi('-', '.');
break;
      case 2:
mail[j] = randi('a', 'z');
break;
    }

  return mail;
}

/*!
** Fill a set with random mails
**
** @param mail The mail list
** @param nb Number of mail to add
** @param longueur Size of each mail
*/
void genMails(std::set<std::string>& mail, int nb, int longueur)
{
  for (int i = 1; i <= nb; ++i)
    mail.insert(generateMail(longueur));
}

/*!
** Display mails
**
** @param mail The mail list
*/
void displayMail(const std::set<std::string>& mail)
{
  typedef std::set<std::string>::const_iterator iter;
  for (iter it = mail.begin(); it != mail.end(); ++it)
    std::cout << *it << std::endl;
}

/*!
** Copy each mail into a file
**
** @param filename The file where to copy mail
** @param mail The mail list
*/
void copyMailIntoFile(const std::string& filename,
      const std::set<std::string>& mail)
{
  typedef std::set<std::string>::const_iterator iter;
  std::ofstream file(filename.c_str(), std::ios::out | std::ios::trunc);

  if (!file)
  {
    std::cerr << "Impossible d'écrire dans le fichier" << std::endl;
    return;
  }

  for (iter it = mail.begin(); it != mail.end(); ++it)
    file<< *it << std::endl;

  file.close();
}

/*!
** The entry point :)
**
** @return 0
*/
int main()
{
  int number = 0;
  std::set<std::string> mail;
  const std::string filename = "mail.txt";

  srand(time(NULL));
  std::cout << "Nombre de mail à générer" << std::endl;
  std::cin >> number;
  genMails(mail, number, 7);

//   displayMail(mail);
  copyMailIntoFile(filename, mail);

  return 0;
}

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
26
Date d'inscription
jeudi 11 novembre 2004
Dernière intervention
29 octobre 2009
3
Merci
Merci pour votre aide !
Je vais essayé sur ces solutions.
Bonnes continuations

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de jekburn

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.