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 :

Cherche fonction tirant mot c++


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Lyceen
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Lyceen

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Cherche fonction tirant mot c++
    Bonjour,
    Je suis un tp d'un celebre site,étant débutant en programmation.Après de vaines recherches sur le web et de nombreux echecs à la compilation lors de mes tentatives, je suis à la recherche d'une fonction ecrite en c++ de base permettant de piocher un mot au hasard dans un dossier .txt .
    Merci d'avance pour votre aide qui peut m'être précieuse en m'aidant à m'améliorer.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    Parce-qu'on est jamais mieux servi que par soi même, je trouve ça dommage que tu nous demande un code tout fait au lieu de nos exposer tes problèmes.

  3. #3
    Candidat au Club
    Homme Profil pro
    Lyceen
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Lyceen

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci de ton aide. Je suis les cours de Mateo mais je n'avais pas pensé à regarder plus loin. J'expose mon problème: j'utilisais les seekg et les tellg pour avoir un mot aléatoire puis un getline+string pour le lire et le mot n'était pas entier. J'ai essayé pendant 3 heures en fait differentes méthodes.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il y a deux raisons pour lesquelles il n'est vraiment pas conseillé de vouloir lire les mots se trouvant dans un fichier "à la demande" en essayant d'avoir un mot "aléatoire"...


    La première est, tout simplement, que tu n'a aucune idée de la taille des différents mots :

    Coucou et bonjour ne sont, tout simplement, pas composés du même nombre de lettres, et il te sera donc impossible, si tu ne sais pas au moins quels étaient les mots qui arrivent avant le Nieme mot, où ce Nième mot commencera effectivement dans le fichier

    Tu pourrais, bien sur, contourner ce problème en décidant de lire les N premiers mots jusqu'à atteindre celui que tu veux retrouver, mais il y a la deuxième raison :

    Les accès aux fichiers sur disque ou réseau sont excessivement lents, et que, même pour un TP, il est largement préférable d'essayer de les limiter au maximum.

    Pour être honnête, les fonction seekg et consors ne devraient, en tout état de cause, jamais être utilisées avec des fichiers en mode texte, à moins que l'idée soit de passer du début du fichier à la fin ou inversement

    L'idéal pour résoudre ton problème est donc de commencer à charger l'ensemble des mots dans une collection "qui va bien" (un std::vector, par exemple), puis d'utiliser cette collection pour accéder au mot recherché.

    Pour ne pas trop te mâcher la tâche, je vais te laisser réfléchir un peu à comment tu pourrais obtenir ce résultat, mais je peux cependant te donner trois conseils:

    1. Utilise le flux de fichiers "ifstream" disponible dans l'espace de noms std par inclusion du fichier d'en-tête <ifstream> pour accéder au contenu de ton fichier texte
    2. Utilise la classe string, disponible également dans l'espace de noms std mais par l'inclusion du fichier d'en-tête <string>, cette fois, pour gérer tes mots
    3. Utilise la collection vector, elle aussi (comme tout ce qui est fournis par le standard, en réalité) disponible dans l'espace de noms std, mais par inclusion du fichier d'en-tête <vector> cette fois pour regrouper les différents mots
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Candidat au Club
    Homme Profil pro
    Lyceen
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Lyceen

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Amen

    Plus serieusement, merci beaucoup, bien que je sois bloqué sur les vectors ( je débute vraiment en c++), mais je vais bientôt arriver au chapitre sur les classes! Encore un grand merci.

  6. #6
    Candidat au Club
    Homme Profil pro
    Lyceen
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Lyceen

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    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
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    #include <vector>
    #include<fstream>
     
    using namespace std;
     
    string RetournerUnMot()
    {
        ifstream fichier("C:/dico.txt");
        string mots;
        fichier.seekg(0, ios::end); //On se déplace a la fin du fichier
        int ligne;
        int taille;
     
        if(fichier)
        {
            taille = fichier.tellg();  //On récupère la position qui correspond donc a la taille du fichier !
            ligne = rand() % taille;
            getline(fichier,ligne);
            vector<string>mot(taille,ligne);
     
        }
        else
        {
            cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
        }
        return vector;
    }
    voilà ma fonction qui plante à la compilation, vous pouvez m'aider???

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    Si elle plante à la compilation, du dois nous fournir le message que le compilo t'affiche et ce à chaque fois. Cependant, l'erreur saute aux yeux :

    Deux solutions : soit tu t'es trompé de nom de variable (ce qui je pense est ici le cas) soit tu veux retourner un vecteur vide et dans ce cas il faudrait plutôt faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return vector<TonType>();

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    EDIT : Mauvais bouton

    Bon je vais tout de même essayer de rendre ce message utile ; y'a plein d'erreurs dans ton code, nottament pourquoi tu déclare un vector<string> si t va directement chercher le mot ?

  9. #9
    Candidat au Club
    Homme Profil pro
    Lyceen
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Lyceen

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je ne pense pas que cela vienne du return:
    |22|error: no matching function for call to 'getline(std::ifstream&, int&)'|
    |30|error: missing template arguments before ';' token|

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    Ben c'est assez explicite : il arrive pas à trouver la fonction getline telle que tu l'appelle (avec les type d'arguments et tout).
    La tu peux donc aller sur ce site que j'apprécie pour sa documentation bien fournie sur la std et tu cherches getline.

    Pof tu tombes sur la page de manuel et tu vois la déclaration de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    istream& getline ( istream& is, string& str, char delim );
    istream& getline ( istream& is, string& str );
    Et la tu peux regarder de nouveau ton message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    |22|error: no matching function for call to 'getline(std::ifstream&, int&)'|
    Donc tu vois ici que tu envoie bien un std::ifstream& comme premier paramètre comme le préconise la doc mais le deuxième argument est de type int& alors qu'on te demande une string&. Ainsi, tu as deux réponses :

    Pourquoi sa marche pas : mauvaise utilisation de la fonction (avec le temps tu connaitera la plupart des messages d'erreur les plus courants du compilo)
    Comment y remédier : lui donner à manger une std::string& au lieu d'un int& puis ensuite traiter la std::string& pour l'extraire dans ton int&.

    En espérant avoir été assez clair et t'avoir aidé,
    Bonne soirée

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par darkrojo Voir le message
    Donc tu vois ici que tu envoie bien un std::ifstream& comme premier paramètre comme le préconise la doc mais le deuxième argument est de type int& alors qu'on te demande une string&. Ainsi, tu as deux réponses :
    Attention, c'est un std::istream, c'est à dire un flux d'entrée quelconque et non un iFstream (qui est un flux de fichier, bien que ca puisse être apparenté à un istream )

    C'est fout ce qu'une petite lettre peut changer les choses ici, hein
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [HTML] cherche fonction css -> inline style
    Par the_bmo dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 24/02/2006, 10h05
  2. Réponses: 4
    Dernier message: 14/11/2005, 11h59
  3. Cherche fonction de traitement de chaine de caractere
    Par DeezerD dans le forum Langage
    Réponses: 1
    Dernier message: 10/09/2005, 14h41
  4. Réponses: 10
    Dernier message: 17/12/2003, 13h51
  5. Cherche Fonction du style replace...
    Par sdchamplas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/03/2003, 13h54

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