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 :

[C++] Chaîne ASCII vers chaîne string


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut [C++] Chaîne ASCII vers chaîne string
    Bonjour à tous,

    Je viens de me remettre au c++ et avec un ami, pour évoluer plus vite, on se lance des défis... Mon dernier défi en date est un générateur de mot de passe...


    Si je faisais aléatoirement, ce serait simple, mais là ... :s Ce que je dois faire, c'est écrire dans un fichier, ligne par ligne, tous les pass possibles :

    aaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaab
    aaaaaaaaaaaaaaaaac
    .....
    aaaaaaaaaaaaaaaaba
    aaaaaaaaaaaaaaaabb

    ect...
    Le nombre de caractères est défini au début du prog, dans un unsigned long. Mon idée était de faire une fonction qui récupère un int en entrée, qui découpe cet INT en tableau de valeurs entre 0 et 255:

    par exemple, decouper(260) => retourne un array {5, 255}
    puis ensuite, dans un string, concaténer dans un while pour faire :
    chaine[i] = char(nombre_decoupe[i]);

    c'est l'ensemble de la table ascii (0-255) que je veux tester, et non juste l'alphabet (a-z), donc pour qu'il y ait aussi les caractères spéciaux...

    Est-ce possible ?

    merci d'avance.

    Astrofan.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    En dehors du fait que je ne vois pas trop le lien entre les différents éléments de ton raisonnement (*), je dirais :
    1/ FAQ Comment convertir un char* en un string ?
    2/ que std::string possède un opérateur + avec un (w)char
    3/ que std::string possède un opérateur []

    (*)Si tu veux générer tous les mots possibles (bonjour la combinatoire), quel est le but de decouper, de ton INT et du mot qu'il génère ?

  3. #3
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    Allez hop ! je te mache tout le boulot !

    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
    58
    59
    60
    61
    62
    63
    class PassGenerator
        {
        public:
            PassGenerator ( const char * alphabet = "abcdefghijklmnopqurstuvwxyz" )
                {
                _alphabet  = alphabet ;
                _alpha_len = (int)strlen( _alphabet ) ;
                }
     
           ~PassGenerator ()
                {
                delete [] _pass ;
                }
     
            void init ( int pass_len )
                {
                _pass_len = pass_len ;
                _pass_int = new int [_pass_len] ;
                _pass     = new char [_pass_len+1] ;
                for ( int i = 0 ; i < _pass_len ; ++i )
                    {
                    _pass[i]     = _alphabet[0] ;
                    _pass_int[i] = 0 ;
                    }
                _pass_int[_pass_len-1]-- ;
                _pass[_pass_len-1]-- ;
                _pass[_pass_len] = 0 ;
                }
     
             bool next ( std::string * pass )
                {
                for ( int i = _pass_len-1 ; i >= 0 ; --i )
                    if (_pass_int[i] < _alpha_len-1 )
                        {
                        _pass_int[i]++ ;
                        _pass[i] = _alphabet[_pass_int[i]] ;
                        *pass    = _pass ;
                        return( true ) ;
                        }
                    else
                        {
                        _pass_int[i] = 0 ;
                        _pass[i]     = _alphabet[0] ;
                        }
                return( false ) ;
                }
     
        protected:
            const char * _alphabet ;
            int          _alpha_len ;
            int          _pass_len ;
            char *       _pass ;
            int  *       _pass_int ;
        } ;
     
    void main ()
        {
        PassGenerator g ("1234") ;
        g.init( 3 ) ;
        std::string s ;
        while ( g.next( &s ))
            std::cout << s << std::endl ;
        }
    et voila !
    Ca t'affiche tous les "mots de passe" entre '111' et '444'.

    Mais comme dit très justement 3DArchi, attention à la combinatoire !
    On a <nb de char de l'alphabet> puissance <longueur du mot de passe> mots de passe possibles.
    Ici 4^3 = 64, ça va mais si tu veux toutes les lettres + chiffres + symboles et des mots de passe de 8 caractères, tu auras le temps d'aller chercher ton café au Mexique et de revenir...

    Hadrien

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Gloups Merci beaucoup à tous les deux =) cela va beaucoup m'aider

    EDIT : En fait, c'est pas que ça va beaucoup m'aider, c'est que mon gros problème est ... Résolu =) Encore merci =)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer une chaîne ascii avec accents codés en utf8
    Par thms92 dans le forum Général Python
    Réponses: 6
    Dernier message: 11/12/2008, 20h21
  2. [Linux] Entier vers chaîne et inversément
    Par nelob dans le forum x86 32-bits / 64-bits
    Réponses: 0
    Dernier message: 08/05/2007, 11h10
  3. conversion chaîne multioctets vers unicode
    Par Bruno75 dans le forum Delphi
    Réponses: 1
    Dernier message: 25/09/2006, 15h53
  4. [Regex] Comment tester une chaîne ASCII 7bits ?
    Par Raduris dans le forum Framework .NET
    Réponses: 4
    Dernier message: 27/03/2006, 09h42
  5. Réponses: 28
    Dernier message: 22/09/2005, 11h57

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