IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Mixeur de wordlist original :)


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Mixeur de wordlist original :)
    Bonjour à tous

    Je viens encore vous embeter avec un petit problème assez tordu ...

    Aujourd'hui ce que je veux faire un recensement de tout les francais sans en négliger aucun , je veux créer la liste de tous les noms et prénoms francais exemple : Anne Anouard; Bertrand Anouard [...] Zakarie Anouard ;Anne Bouvin ....

    C'est un peu audacieux , mais le principe et simple , la première liste contient les prénoms "liste 1" , et la seconde liste contient les noms "liste 2 ", et le programme que je souhaite coder doit les mixés (en donnant toutes les possiblités) en ayant toujours un mot de la liste 1 au début , et un mot de la liste 2 ensuite .

    Aprés avoir fouiné le web , je suis tombé sur un petit truc , crée par des hackers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #include <iostream>    /* cout, endl */
    #include <fstream>     /* ifstream */
    #include <string>      /* string */
    using std::cout;
    using std::endl;
    using std::ifstream;
    using std::string;
     
    int main(int argc, char **argv)
    {
        if ( 3 != argc )
        {
            cout << "Usage: " << argv[0] << " liste1.txt liste2.txt > out.txt" << endl;
            return 0;
        }
     
        ifstream a( argv[1] ); /* Open the first file */
     
        if ( !a.is_open() )
        {
            cout << "Could not open " << argv[1] << endl;
            return 0;
        }
     
        string str_a;
     
        while ( a >> str_a )
        {
            string str_b;
     
            ifstream b( argv[2] );
     
            if ( !b.is_open() )
            {
                cout << "Could not open " << argv[2] << endl;
                return 0;
            }
     
            while ( b >> str_b )
            {
                cout << str_a << str_b << endl;
            }
        }
    }
    mais aprés l'avoir compilé (avec codeblocks) , l'executable se ferme direct , et le fichier out a pas bougé , quelqu'un peut m'expliquer ? :/

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu possèdes les 2 listes ?
    Pourquoi prendre sur internet un "code source de hacker" pour faire une... bête combinaison de 2 listes ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Pour savoir d'où vient le problème, il vaudrait mieux marquer une pause juste avant chaque "return" .

    Pour cela, je te renvoie à la FAQ concernant la mise en pause d'un programme:

    http://cpp.developpez.com/faq/cpp/?p...e#SL_cin_pause

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Je crois que j'ai mal expliquer le problème cyrille , enfaites la "combinaison" n'est pas linéaire , il y une liste contenant 1100 noms de familles , et une liste contenant environ 800 prénoms , chaque nom de famille doit être associé avec tous les 800 prénoms il y a donc 1100x800 = 8 800 000 combinaisons possibles , c'est loin d'être une "bête combinaison " ...

    J'ai fais ce que tu m'as demandé Boumbata , le code modifié est le suivant , (j'ai inclu les headers nécessaires mentionné dans la FAQ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include <string.h>  
    #include <iostream>    /* cout, endl */
    #include <fstream>     /* ifstream */
    #include <string>   
    #include <limits> 
    using namespace std;   
    using std::cout;
    using std::endl;
    using std::ifstream;
    using std::string;
     
    int main(int argc, char **argv)
    {
        if ( 3 != argc )
        {
            cout << "Usage: " << argv[0] << " in1.txt in2.txt > out.txt" << endl;
    		cout << "Appuyez sur entrée pour continuer...";
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
            return 0;
        }
     
        ifstream a( argv[1] ); /* Open the first file */
     
        if ( !a.is_open() )
        {
            cout << "Could not open " << argv[1] << endl;
    		cout << "Appuyez sur entrée pour continuer...";
    		cin.ignore( numeric_limits<streamsize>::max(), '\n' );
            return 0;
        }
     
        string str_a;
     
        while ( a >> str_a )
        {
            string str_b;
     
            ifstream b( argv[2] );
     
            if ( !b.is_open() )
            {
                cout << "Could not open " << argv[2] << endl;
    			cout << "Appuyez sur entrée pour continuer...";
    			cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    			return 0;
            }
     
            while ( b >> str_b )
            {
                cout << str_a << str_b << endl;
            }
        }
    }
    aprés la compilation , l'executable , me demande d'écrire une fois appuyez sur entrée pour continuer , et s'arrête , le fichier texte out.txt , n'as pas bougé ...

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Tu n'aurais pas oublié un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cout << "Appuyez sur entrée pour continuer...";
    cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    return 0;
    à la toute fin ?

    Si c'est le cas, alors ton "while ( a >> str_a )" ou ton "while ( b >> str_b )" te fait directement sortir de la boucle. Pour le vérifier, tu peux mettre un cran d'arrêt à l'intérieur du premier while pour voir s'il s'arrête ou non au breakpoint. Tu as quoi comme compilateur ?

    EDIT: chez moi ton code marche bien.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Boumbata , j'ai encore suivis tes directives , en effet une fois compilé , l'éxecutable ne fais aucune boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <string.h>  
    #include <iostream>    /* cout, endl */
    #include <fstream>     /* ifstream */
    #include <string>   
    #include <limits> 
    using namespace std;   
    using std::cout;
    using std::endl;
    using std::ifstream;
    using std::string;
     
    int main(int argc, char **argv)
    {
        if ( 3 != argc )
        {
            cout << "Usage: " << argv[0] << " in1.txt in2.txt > out.txt" << endl;
    		cout << "Appuyez sur entrée pour continuer...";
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
            return 0;
        }
     
        ifstream a( argv[1] ); /* Open the first file */
     
        if ( !a.is_open() )
        {
            cout << "Could not open " << argv[1] << endl;
    		cout << "Appuyez sur entrée pour continuer...";
    		cin.ignore( numeric_limits<streamsize>::max(), '\n' );
            return 0;
        }
     
        string str_a;
     
        while ( a >> str_a )
        {
    		cout << "Appuyez sur entrée (boucle a) pour continuer...";
    		cin.ignore( numeric_limits<streamsize>::max(), '\n' );
            string str_b;
            ifstream b( argv[2] );
     
            if ( !b.is_open() )
            {
                cout << "Could not open " << argv[2] << endl;
    			cout << "Appuyez sur entrée pour continuer...";
    			cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    			return 0;
            }
     
            while ( b >> str_b )
            { 	cout << "Appuyez sur entrée (boucle b)pour continuer...";
    			cin.ignore( numeric_limits<streamsize>::max(), '\n' );
     
                cout << str_a << str_b << endl;
            }
     
        }
    }
    j'ai mis un indicateur dans chaque boucle , pour le cran d'arrêt sur console me montre si j'ai affaire a la boucle a ou b , sur console , j'ai ca qui s'affiche :
    Usage : C:/Users/user/Desktop/projet/project2.exe in1.txt in2.txt > out.txt
    Appuyez sur entrée pour continuer....
    *et là j'appuyer sur entrée , le programme se ferme , et y'as rien qui a changé dans out.txt , un peu plus d'info sur les 2 fichiers in1 et in2 pourrais peut être éclaircir les choses :/ :
    le contenu de in 1 .txt :bob(à la ligne); jean;
    le contenu de in2.txt:Marley(à la ligne); Dupont
    Resultat théorique dans out.txt:bob marley; jean marley; bob dupont ; jean dupont ;
    Resultat en pratique :

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Au risque de te décevoir, si c'est une bête combinaison.
    En fait je suis même pas sur qu'on puisse parler de combinaison, quand il s'agit juste de parcourir 2 boucles imbriquées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0; i<10; ++i)
        for (int j=0; j<10; ++j)
        {
        }
    Tu vois, rien d'original et encore moins de compliqué !

    Pour ton problème... faudrait que tu comprennes un minimum ce que tu copies du net en fait.
    Si tu te contentes de lancer l'exe, forcément ça va pas marcher.
    Une simple lecture de la source indique très clairement comment faire : lancer l'exe avec 2 paramètres. D'ailleurs, il te l'écrit dans la console avant le "Appuyez sur entrée pour continuer..." (que tu peux aisément retrouver dans la source) : "Usage: " << argv[0] << " in1.txt in2.txt > out.txt" (Usage : C:/Users/user/Desktop/projet/project2.exe in1.txt in2.txt > out.txt)
    argv[0] existe toujours, il s'agit du chemin de l'executable.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par hakods7 Voir le message
    j'ai mis un indicateur dans chaque boucle , pour le cran d'arrêt sur console me montre si j'ai affaire a la boucle a ou b , sur console , j'ai ca qui s'affiche :
    Usage : C:/Users/user/Desktop/projet/project2.exe in1.txt in2.txt > out.txt
    Appuyez sur entrée pour continuer....
    *et là j'appuyer sur entrée , le programme se ferme , et y'as rien qui a changé dans out.txt
    ah oui ça change tout: il faut que ta commande à rentrer dans la console ressemble à:
    <C:/Users/user/Desktop/projet/project2.exe "lechemin_complet_de_ton_fichier_1" "lechemin_complet_de_ton_fichier_2">

    lance ce que j'ai mis entre les < > dans la console.

    EDIT: pour éviter de devoir systématiquement ouvrir une console pour lancer ça, tu devrais créer un fichier run.bat(je parle pour windows) avec dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Start "le_chemin_comple_de_ton_exe" "le_chemin_comple_de_ton_fichier_1" "le_chemin_comple_de_ton_fichier_2"

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci bousk pour l'aide , mais j'ai pas vraiment compris que dois-je changer finalement dans le code pour faire fonctionner l'executable ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Y'aurais-t-il s'il vous plait un moyen de fixer dans le code source le chemin d'accés des deux fichiers ? parceque sur console y'as des caractères que veulent pas sortir le fichier .bat que j'ai créée il ouvres pas les fichiers en même temps , ce qui fais que le programme tourne avec une seule liste .
    je commence à deprimer :

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par hakods7 Voir le message
    Y'aurais-t-il s'il vous plait un moyen de fixer dans le code source le chemin d'accés des deux fichiers ? parceque sur console y'as des caractères que veulent pas sortir le fichier .bat que j'ai créée il ouvres pas les fichiers en même temps , ce qui fais que le programme tourne avec une seule liste .
    je commence à deprimer :
    Quel caractère en particulier ? Montre nous ton batch.

    Il suffit pour ça de:

    - virer la condition selon argc au début (vu que tu n'auras plus d'entrées pour ton exe)
    - remplacer tes argv par les string correspondantes:

    argv[1] => ton string contenant le chemin absolu vers ton fichier 1

    argv[2] => ton string contenant le chemin absolu vers ton fichier 2

Discussions similaires

  1. Deformations des vertex loin de l'origine
    Par o.carre dans le forum OpenGL
    Réponses: 6
    Dernier message: 23/04/2005, 18h26
  2. XMLSERVICE d'origine ?
    Par powerlog dans le forum XMLRAD
    Réponses: 2
    Dernier message: 22/03/2005, 10h54
  3. Rotation et origine
    Par goutbouyo dans le forum OpenGL
    Réponses: 7
    Dernier message: 21/11/2004, 10h23
  4. [JSP] récupération de l'origine du submit
    Par Jovial dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/04/2004, 09h40
  5. Récupérer la table d'origine du champs
    Par adelavarenne dans le forum Bases de données
    Réponses: 7
    Dernier message: 02/04/2004, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo