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 :

Déterminer le plus grand mot d'un fichier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Par défaut Déterminer le plus grand mot d'un fichier
    Bonsoir tout le monde, dans le cadre de mon projet on m'a demandé charger un fichier txt remplie de chaine de charctére

    chaque mot dans une ligne .. pour le moment mon but est de calculer le nombre de caractère le plus grand c a dire le mot le plus long ...

    il y a plusieurs erreur dans la compilation ...

    et j'ai vraiment besoin de votre aide les gars sachant que je débute sur le c++ et j'utilise l'editeur de qt4.8

    voila mon code
    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
     
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
      using namespace std;
    int main()
    {
        // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        std::ifstream fichier( "Liste_mots.txt" );
       int k=0;
        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
        {
            std::string ligne; // variable contenant chaque ligne lue
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            while ( std::getline( fichier, ligne ) )
            {
                int i=0;
                if (ligne[i]!=""){
                    std::cout << ligne[i] << std::endl;
                }
     
             while (ligne[i]!='') do{
                i++;
                if (i>k){k=i;
                }
                i=0;
                // afficher la ligne à l'écran
               std::cout << k << std::endl;
            }
        }
     
     
    }

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Mettre tes erreurs aurait été chouette, m'enfin bon... Je les mets donc moi-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    t.cpp:23:21: error: empty character constant
    t.cpp: In function \u2018int main()\u2019:
    t.cpp:19: error: ISO C++ forbids comparison between pointer and integer
    t.cpp:31: error: expected 'while' before '}' token
    t.cpp:31: error: expected '(' before '}' token
    t.cpp:31: error: expected primary-expression before '}' token
    t.cpp:31: error: expected ')' before '}' token
    t.cpp:31: error: expected ';' before '}' token
    t.cpp:34: error: expected '}' at end of input
    Donc traitons les erreurs une par une (qui sont toutes plutôt explicites d'ailleurs).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.cpp:23:21: error: empty character constant
    Ligne 23 on a un magnifique ligne[i] != ''. Comme le dit le compilateur, ça n'existe pas. Je pense que tu cherchais '\0'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.cpp:19: error: ISO C++ forbids comparison between pointer and integer
    Tu fais char != char* (oui, "" est char* de taille 0).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.cpp:31: error: expected 'while' before '}' token
    Là ça vient juste du fait que tu ne maîtrises rien du tout. La boucle while ne fonctionne pas comme ça, la boucle do non plus. T'es parti pour relire ton cours. Pareil pour toutes les erreurs qui suivent.

    Bon maintenant la conclusion qui tue : ta boucle "while(ligne[i] != ''" ne sert à strictement rien. Pourquoi ? Hé bien si tu avais lu la doc de la classe string, tu le saurais. Apprendre à lire son cours et à aller chercher les infos est la base de tout apprentissage.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Par défaut
    'est bon probléme régler les gars merci ..... et désoler pour les erreur syntaxique ....

    c'est bon maintenant j'essaie de cherger le fichier dans un vecteur ... et je commence par un vecteur statique ... donc j 'ai calculer les ligne du fichier et puis je l'ai déclarer ... mais il y a un bug aprés l"exécution

    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
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    typedef struct termes{
         string terme;
    }termes;
    termes index[32414];
     
    int main()
    {
     
        // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        std::ifstream fichier( "Liste_mots.txt" );
       int k,i=0;
        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
        {
           // std::string ligne, terme; // variable contenant chaque ligne lue
              std::string ligne; // variable contenant chaque ligne lue
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            std::getline( fichier, ligne );
     
            k=ligne.length();
     
           // terme.assign(ligne, 0,ligne.length());
           // index[i]
     
            index[i].terme.assign(ligne, 0,ligne.length());
         // i++;
            while ( std::getline( fichier, ligne ) )
            {
                i++;
                 if(ligne.length() > k ){
                     k=ligne.length();
                    // terme.assign(ligne, 0,ligne.length());
                     //index[i].assign(ligne, 0,ligne.length());
                      index[i].terme.assign(ligne, 0,ligne.length());
                 }        
     
     
            }
            std::cout << i<< std::endl;
            std::cout << index[i-1].terme << std::endl;
           // std::cout << index[i] << std::endl;
            printf("k=   %d\n",k);
            //std::cout << "k="+k << std::endl;
        }   
     
     
    }
    j'avoue que je suis brouillon .. je laisse toujours d'autre alternative comme commentaire ... maintenant c bon j'ai lu le plus grand caractère

    mais je veux charger le fichier dans un vecteur puis calculer sa taille et de même dans une liste chaînée car je veux faire une comparaison entre les deux pour démontrer la meilleur procédure au niveau de la mémoire

    -

  4. #4
    Membre actif
    Homme Profil pro
    Thésard
    Inscrit en
    Mars 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Thésard
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 54
    Par défaut
    Si tu pars du principe que tes mots sont séparés par des espaces tu peux calculer la différence de position entre deux espaces, ça te donnera la taille des mots.

    Tu peux utiliser la fonction find il me semble pour ça (à confirmer).

    Tu n'as pas besoin de repréciser que tu vas utiliser l'environnement standard pour appeler getline, cout, string... dans la mesure où tu définis un namespace comme std.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    mais je veux charger le fichier dans un vecteur puis calculer sa taille et de même dans une liste chaînée car je veux faire une comparaison entre les deux pour démontrer la meilleur procédure au niveau de la mémoire
    Tout un programme!

    Eh bien il suffit de déclarer un vecteur et une liste (ne pas oublier d'évidence les #include nécessaires)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector<std::string> textvec;
    std::list<std::string> textlst;
    puis de rentrer chaque ligne dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::fstream fs(cheminDuFichier);
    while (fs) {
      std::string line;
      std::getline(fs, line);
      textvec.push_back(line);
      textlst.push_back(line);
    }
    Après pour étudier les différences dans la gestion de la mémoire, tu vas avoir besoin d'outils supplémentaires...

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Par défaut
    merci les gars ... voila le code aprés l'optimisation et ca marche ..... maintenant je vais faire de même pour une liste chainée ... et la j'aurai vraiment besoin d'aide

    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
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    typedef struct termes{
    	 string terme;
    }termes;
    termes index[32414];
     
    //int * p2 = new termes;
    int main()
    {
     
        // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        std::ifstream fichier( "Liste_mots.txt" );
     
       int k,i=0,j;
        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
        {
           // std::string ligne, terme; // variable contenant chaque ligne lue
              std::string ligne, termet; // variable contenant chaque ligne lue
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            std::getline( fichier, ligne );
     
            k=ligne.length(); 
     
            //termet.assign(ligne, 0,ligne.length());
     
     
            index[i].terme.assign(ligne, 0,ligne.length());
         // i++;
            while ( std::getline( fichier, ligne ) )
            {
                i++;
                 if(ligne.length() > k ){
                 	 k=ligne.length(); 
                 	// termet.assign(ligne, 0,ligne.length());
     
    			 }         
     
                index[i].terme.assign(ligne, 0,ligne.length());
            }
            std::cout << i<< std::endl;
     
            termet.assign(index[i].terme,0,index[i].terme.length());
           // std::cout << termet << std::endl;
            /*
            for(j=0;j<=i;j++){
                              std::cout << index[j].terme << std::endl;
            }
           */
     
            printf("k=   %d\n",k);
     
            printf("sizeof(index)      = %d\n", sizeof(index));
     
            do{}while(1!=2);
        }    
     
     
    }

Discussions similaires

  1. Déterminer le nombre d'occurences des mots dans un fichiers texte
    Par fraisa1985 dans le forum Général Java
    Réponses: 13
    Dernier message: 26/10/2021, 01h58
  2. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  3. Déterminer le nombre de mots dans deux fichiers de texte
    Par daniel1985 dans le forum Général Java
    Réponses: 1
    Dernier message: 14/12/2012, 11h51
  4. Déterminer que today et plus grand que la date entrée
    Par HWICE dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/05/2008, 17h03
  5. Algorithme de plus grand sous-mot commun
    Par nicolas66 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 28/11/2006, 13h24

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