Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture

Sujet résolu
    31 mars 2019 à 12:08:52

    Bonjour

    Je chercherais un moyen de lire un ligne aléatoire dans un flux importé en ifstream. Quelqu'un pourrait m'aider ?

    -
    Edité par davidzkitischwili 31 mars 2019 à 12:09:21

    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2019 à 12:56:50

      Hors de tout contexte, c'est une ânerie, c'est effroyablement compliqué et c'est catastrophique si on pense en terme d’optimisation. Bref, c'est juste nul.

      Une fois ce constat fait, la question se pose , comment peut on faire autrement? Une réponse possible est de lire le fichier un bonne fois pour toutes. Je lis le fichier , je le stocke dans un tableau de chaîne de caractères et le tour est joué, au lieu de devoir aller lire un ligne aléatoire dans un fichier, mon problème se résume à lire une case aléatoire du tableau que j'ai monté en mémoire, et là c'est facile, il suffit de tirer au sort un nombre entre 0 et taille du tableau moins 1 (Parce que l'indice du tableau commence à 0). 

      Le seul argument qui va contre ça, c'est la taille du dictionnaire, et cet argument ne tient pas une seconde avec nos bécanes modernes, si je prends une version hyper-étendue de l'anglais (qui est la langue qui comporte le plus de mots), je n'aurais qu'environ 5000000 mots en comptant large, ils ne feront pas plus de 16 lettres chacun(il en y en aura quelques uns plus long, mais l'immense majorité fera moins de 16 lettres). Un petit calcul me dit 5000000*16 ça fait 8 Mo, entre 1 et 2% de la RAM d'un PC standard...

      -
      Edité par int21h 31 mars 2019 à 13:10:31

      • Partager sur Facebook
      • Partager sur Twitter
      Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
        31 mars 2019 à 12:58:40

        Mais si chaque ligne du flux contient un mot, le tableau lira un caractère aléatoire, non ? D'accord Merci

        -
        Edité par davidzkitischwili 31 mars 2019 à 13:15:28

        • Partager sur Facebook
        • Partager sur Twitter
          31 mars 2019 à 14:13:48

          Bien sur que non. 

          Pour fixer les idées, utilisons un dictionnaire de 10 mots (là c'est simple, on peut visualiser facilement), Première étape, je lis le fichier, de là je sors un tableau qui contient 10 mots, pour choisir un mot mystère, je tire au sort un nombre entre 0 et 9 (inclus), ce nombre est l'indice du tableau où je vais trouver le mot mystère qui servira pour cette partie.

          PS si 10 mots, c'est trop compliqué, bricole avec juste 4 ou 5 mots, comme souvent en programmation, si tu sais le faire avec 4 ou 5 items, tu sais le faire avec 500000000 items, ce n'est qu'une question de généralisation.

          -
          Edité par int21h 31 mars 2019 à 14:18:37

          • Partager sur Facebook
          • Partager sur Twitter
          Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

          Lecture

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown