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 :

concatenation de char*


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut concatenation de char*
    salut tout le monde

    Etant plus php, le C++ est un peu loin pour moi, je dois generer une liste de tous les mots possibles avec une serie de caractere et les comparer avec un mot -> si pareil, j'affiche, un peu selon les modeles de forces brutes et j'ai des soucis, ca fait 2 jours que j'essaie de concatener, mais rien � faire, erreur windows. Je met le code tel qu'il est la, mais j'ai essay� tout ce que ma memoire se souvenait des pinteurs, string...;
    Merci a celui qui pourra me debloquer (j'utilise DevC++, mode console)

    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
    int main (int argc, char *argv[])
    {
      int i, j, k;
      char **alpha;
      *alpha[0] = "a";*alpha[1] = "b";*alpha[2] = "c";*alpha[3] = "d";*alpha[4] = "e";*alpha[5] = "f";*alpha[6] = "g";
      *alpha[7] = "h";*alpha[8] = "i";*alpha[9] = "j";*alpha[10] = "k";*alpha[11] = "l";*alpha[12] = "m";*alpha[13] = "n";
      *alpha[14] = "o";*alpha[15] = "p";*alpha[16] = "q";*alpha[17] = "r";*alpha[18] = "s";*alpha[19] = "t";*alpha[20] = "u";
      *alpha[21] = "v";*alpha[22] = "w";*alpha[23] = "x";*alpha[24] = "y";*alpha[25] = "z";*alpha[26] = "0";
     
      char *ref;
      char *meuh;
     
      if (argc > 1)
        for (i = 1; i < argc; i++)
          if (argv[i][0] == '-')
          {
             ref = argv[i] + 1;
             for (j=0;j<26;j++)
                 //for (k=0;k<26;k++)
                 {
                     //cout <<ref <<endl;
     
                     meuh = strcat(alpha[j] , alpha[j]);
                     //cout << meuh <<endl;
                     if (strcmp(ref,meuh) == 0)
                        cout <<  meuh <<endl;
                 }
          }
      system ("pause");
      return (0);
    }
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Salut

    Ton programme crash (tr�s certainement) parce que tu n'alloues jamais de m�moire pour tes cha�nes.

    Mais heureusement pour toi tu fais du C++, et tu n'as pas besoin de manpiuler toutes ces choses horribles qui viennent du C.

    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
    #include <string>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
       // Création d'une chaine
       string s1 = "Coucou";
     
       // Copie de chaine
       string s2 = s1;
     
       // Concaténation
       string s3 = s1 + s2;
       s3 += "bop";
     
       // Accès aux éléments
       s3[0] = 'T';
     
       // Etc...
     
       return 0
    }
    Avec �a tu devrais t'en sortir pour faire ton programme correctement, et �a devrait t'�tre plut�t familier si tu viens du PHP (j'imagine).


  3. #3
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    merci, je regarde �a et je vois si je m'en sors.
    Peut-on faire pareil avec des char?
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par d�faut
    Citation Envoy� par wamania
    merci, je regarde �a et je vois si je m'en sors.
    Peut-on faire pareil avec des char?
    Salut,
    Je te conseille effectivement d'utiliser si tu fais du c++ des string comme indiqu� pr�cedemment.
    N�anmoins si tu tiens absoluement a le faire avec des char*, il faut utiliser str(n)?cat pour concat�ner des chaines. Je te conseille de regarder le code suivant inspir� du tien:
    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
     
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
     
    int main 
    (int argc, char *argv[])
    {
      int i, j;
      char* alpha= new char[26];
      char* ch = new char[3];
     
      alpha[0] = 'a';  alpha[1] = 'b';  alpha[2] = 'c';  alpha[3] = 'd';  alpha[4] = 'e';  alpha[5] = 'f';
      alpha[6] = 'g';  alpha[7] = 'h';  alpha[8] = 'i';  alpha[9] = 'j';  alpha[10] = 'k';  alpha[11] = 'l';
      alpha[12] = 'm';  alpha[13] = 'n';  alpha[14] = 'o';  alpha[15] = 'p';  alpha[16] = 'q';  alpha[17] = 'r';
      alpha[18] = 's';  alpha[19] = 't';  alpha[20] = 'u';  alpha[21] = 'v';  alpha[22] = 'w';  alpha[23] = 'x';
      alpha[24] = 'y';  alpha[25] = 'z';
     
     
      for (i=0;i<26;i++)
    	for (j=0;j<26;j++)
                 {
    memset(ch,0,3); // Initialisation de la chaine
    strncat(ch ,&alpha[i],1);
    strncat(ch,&alpha[j],1);
    cout <<"CHAINE:"<< ch <<endl;
     
                 }
     
     
      delete [] ch;
      delete [] alpha;
      system ("pause");
      return (0);
    }

  5. #5
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    ca marche, merci � vous deux, je pense que j'aurais jamais trouv�.
    n'hesiter pas si vous avez besoin de PHP
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  6. #6
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    resalut

    Bon, c'est nickel, tout marche.
    J'ai juste une petite question et je ne voulais pas utiliser un nouveau post juste pour �y a t-il une maniere de lui dire caractere "rien", je m'explique
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    alpha[0] = 'a';  alpha[1] = 'b';  alpha[2] = 'c';  alpha[3] = 'd';  alpha[4] = 'e';  alpha[5] = 'f';.........
    alpha[37] = '';    // et ça, il veut pas (vive le php)
    pcq que sinon, si je fais par exemple 8 boucles, j'aurai forcement des mots de 8 lettres, et je veux que mes 8 boucles puisse generer des mots de 1 � 8 lettres.
    Vous voyez mon dilemme
    Merci � vous en tout cas
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  7. #7
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    desol�, regl�
    Merci encore
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par d�faut
    Citation Envoy� par wamania
    J'ai juste une petite question et je ne voulais pas utiliser un nouveau post juste pour �y a t-il une maniere de lui dire caractere "rien", je m'explique
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    alpha[0] = 'a';  alpha[1] = 'b';  alpha[2] = 'c';  alpha[3] = 'd';  alpha[4] = 'e';  alpha[5] = 'f';.........
    alpha[37] = '';    // et ça, il veut pas (vive le php)
    Le caractere '' n'existe pas en C/C++. Utilise le caract�re '\0' qui est le caract�re null plutot.
    et si tu fais ca n'oublie d'adapter le code pour ne pas avoir d'erreur de m�moire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    char* alpha=new char[38];

  9. #9
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    T'as pas utilis� les string :

    Pourquoi pas �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    string alpha = "abcdefghijklmnopqrstuvwxyz...";
    Et sinon pour concat�ner un caract�re � un string tu fais juste un +=, �a marche tr�s bien.

  10. #10
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par d�faut
    Citation Envoy� par wamania
    pcq que sinon, si je fais par exemple 8 boucles, j'aurai forcement des mots de 8 lettres, et je veux que mes 8 boucles puisse generer des mots de 1 � 8 lettres.
    Je prefere te prevenir que le temps de g�n�ration est extremement long.
    J'ai fait un esquisse de programme r�alisant ceci et voici le r�sulta (a noter qu'il est probablement possible de mieux faire)t:
    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 <iostream>
    #include <string>
    #include <vector>
    #include <windows.h> /* Pour calculer le temps */
    using namespace std;
     
    static string alphabet="abcdefghijklmnopqrstuvwxyz";
    vector<string> generated;
     
    void generate(string chaine, unsigned size)
    {
    if (chaine.length()<size) 
    {
    	for(int i=0;i<26;i++)
    		{
    		string tmp=chaine+alphabet[i];
    //		generated.push_back(tmp); 
    /* Cette ligne est en commentaire car si tu les stockes, ta mémoire va exploser, puisque le nombre de mots correspond au nombre  26+26^2+...+26^p.Pour 8 lettres le nombre de mots est de 217 180 147 158 soit 217*8 = 1, 7 To environ .*/
    		generate(tmp,size);
    		}
    }
     
    }
     
     
    int
    main()
    {
     
    LARGE_INTEGER start,end,freq;
    long long  elapsed;
     
    for(int i=0;i<8;i++)
    {
    	generated.clear();
    	QueryPerformanceFrequency(&freq);
    	QueryPerformanceCounter (&start);
     
    	generate("",i);
     
    	QueryPerformanceCounter (&end);
    	elapsed= (((end.QuadPart)-(start.QuadPart)) * 1000000) / freq.QuadPart;
    	cout<<"Temps d'execution ["<<i<<" lettres]:"<<(float)elapsed /1000000<<" secs"<<endl;
    }
     
    /**************************************
     for(int i=0;i<generated.size();i++)
            cout<<generated[i]<<endl;
    //Pour afficher les résultats
    ****************************************/
     
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $> a.exe
    Temps d'execution [0 lettres]:1e-006 secs
    Temps d'execution [1 lettres]:1.7e-005 secs
    Temps d'execution [2 lettres]:0.000214 secs
    Temps d'execution [3 lettres]:0.02869 secs
    Temps d'execution [4 lettres]:0.196923 secs
    Temps d'execution [5 lettres]:5.25353 secs
    ^C
    $>
    J'ai arret� la car le temps pour g�n�rer les mots de 1 � 6 lettres est trop long (pourtant j'ai compil� avec l'option -O3 qui optimise au maximum)... Pour que tu en sois convaincu teste par toi meme .

    Pou r�sumer, retiens cette proc�dure pour g�n�rer (qui est peut etre optimisable, avis aux interess�es)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void generate(string chaine, unsigned size)
    {
    if (chaine.length()<size) 
    {
    	for(int i=0;i<26;i++)
    		{
    		string tmp=chaine+alphabet[i];
    		generate(tmp,size);
    		}
    }
     
    }

  11. #11
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    oui, je me doutais que le temps serait long, mais c'est juste un prog pour montrer la faiblesse de certain mot de passe md5 (je suis webmaster n'oublier pas (php)) et je lutte pour securiser mes scripts, alors que mes charmants visiteurs se font un plaisir de mettre des mots de passe du style slt ou lol, donc j'ai decid�, pour les admins, de lancer ce prog, si je trouve, ils ont perdus
    Voila
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  12. #12
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    je retiens ton code, je vais essayer de voir si je peux optimiser.
    j'arrive qd meme � pres de 300 000 essaie par seconde
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  13. #13
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par d�faut
    Citation Envoy� par wamania
    je retiens ton code, je vais essayer de voir si je peux optimiser.
    j'arrive qd meme � pres de 300 000 essaie par seconde
    Ok je comprends ton interet, tu peux utiliser des programmes utilisant des dictionnaires (Brute par exemple).
    La recherche se fait suivant un dictionnaire ce qui restreint l'ensemble.
    Une autre m�thode est de g�n�rer de facon al�atoire les mots de passe et esperer avoir de la chance.

  14. #14
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    oui, je pense que je vais essayer aussi par ouverture de fichier, il est vrai que la plus part du temps, les dico suffisent, les gens sont des quand il sagit de mettre un mot de passe
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  15. #15
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par d�faut
    Citation Envoy� par wamania
    oui, je pense que je vais essayer aussi par ouverture de fichier, il est vrai que la plus part du temps, les dico suffisent, les gens sont des quand il sagit de mettre un mot de passe
    OUI je confirme, j'ai lu un article r�cemment qui indiquait que la proportion de mots de passe retrouv�es par un dictionnaire est relativement forte.
    Apr�s tout d�pend de la strat�gie de s�curit� qeu tu veux utiliser .

  16. #16
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Il existe d�j� des progs connus qui savent faire ce genre de choses assez rapidement.

    Ensuite, Korta, pour la lenteur, je vois des copies de chaines, des chaines aux dimensions non r�serv�es, de la r�cursivit� (n'ayant pas r�fl�chi s�rieusement au probl�me, je ne sais pas si on peut s'en passer ici ; mais je pense toutes fois que oui quand on bosse en profondeur d'abord).
    Bref, les temps de calculs peuvent �tre r�duits par un facteur lin�aire probablement pas n�gligeable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  17. #17
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    Salut
    Loulou24 ->
    Je pense que je vais mettre des strings ensuite, histoire de pouvoir manipuler tout �a, mais le code de hashage que j'ai voulait que je lui donne un char*, alors moi, je fais, mais mon old old C++ commence � refaire surface, et maintenant que je sais que le code fonctionne, je vais m'amuser � essayer de vraiment le comprendre.
    La strat�gie de s�curit�?
    Juste eviter que ce qui ne doit pas arriver arrive. Je participe � un projet en commun (sur developpez) dans conception d'un espace membre s�curis�, men� par sub0, alors j'ai pas envie que tous ces travaux soit an�anti par un admin qui a decid� de mettre comme mot de passe "lol" (y en a vraiment)
    Voila
    Merci
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  18. #18
    R�dacteur

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par d�faut
    Il existe d�j� des progs connus qui savent faire ce genre de choses assez rapidement.
    Oui, mais quel plaisir de faire les choses soit meme, c'est comme la cuisine
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre s�curis� en PHP5

  19. #19
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par d�faut
    Citation Envoy� par Luc Hermitte
    Ensuite, Korta, pour la lenteur, je vois des copies de chaines, des chaines aux dimensions non r�serv�es, de la r�cursivit� (n'ayant pas r�fl�chi s�rieusement au probl�me, je ne sais pas si on peut s'en passer ici ; mais je pense toutes fois que oui quand on bosse en profondeur d'abord).
    Bref, les temps de calculs peuvent �tre r�duits par un facteur lin�aire probablement pas n�gligeable.
    Je serai curieux de voir tout ce que tu dis .

  20. #20
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    En prenant le param�tre par r�f�rence constante, j'ai un gain de 10% environ.
    En utilisant cette fonction :
    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
    void generate(string & chaine, unsigned size, unsigned depth)
    {
        if (depth == size) return ;
        chaine.resize(depth+1);
        for(int i=0;i<26;++i)
        {
            chaine[depth] = alphabet[i];
            // std::cout << chaine << "\n";
            generate(chaine,size, depth+1);
        }
        chaine.resize(depth);
    }
    ...
    //lancée avec :
    string ch;
    generate(ch, i, 1); // i varie dans [1,8] (<=> ]0,9[)
    Je gagne un facteur �norme : x70.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //avant: en -O4 sur ma machine
    Temps d'execution [0 lettres]:3e-06 secs
    Temps d'execution [1 lettres]:0.000486 secs
    Temps d'execution [2 lettres]:0.013288 secs
    Temps d'execution [3 lettres]:0.368546 secs
    Temps d'execution [4 lettres]:9.18898 secs
     
    // après
    Temps d'execution [1 lettres]:1.6e-05 secs
    Temps d'execution [2 lettres]:0.00019 secs
    Temps d'execution [3 lettres]:0.005236 secs
    Temps d'execution [4 lettres]:0.126914 secs
    Temps d'execution [5 lettres]:3.37162 secs
    En utilisant un tableau de caract�res correctement allou�, on doit pouvoir encore gratter un petit facteur vu qu'il nous permettra d'�crire "ch[i]=0;" plut�t que de faire deux appels � resize();
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 03/06/2009, 11h35
  2. [Preprocesseur] Concatenation de char
    Par TabrisLeFol dans le forum C
    R�ponses: 17
    Dernier message: 22/01/2007, 19h53
  3. concatenation de char *
    Par Blo0d4x3 dans le forum C
    R�ponses: 18
    Dernier message: 09/08/2006, 09h45
  4. Concaténer un char et un num dans une variable
    Par ade05fr dans le forum Shell et commandes GNU
    R�ponses: 6
    Dernier message: 24/10/2005, 16h32
  5. R�ponses: 2
    Dernier message: 01/07/2004, 11h36

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