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

Langage C++ Discussion :

Problème avec la classe istringstream


Sujet :

Langage C++

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut Problème avec la classe istringstream
    Bonsoir à tous.
    Je m'amuse à écrire un petit programme pour évaluer des expressions arithmétiques écrite en notation polonaises. Les expressions sont contenues dans un fichier. Une ligne = une expression.
    La première tâche que j'éffectue est de récupérer une expression depuis le fichier et d'en identifier les différents facteurs. J'utilise à cet effet les classes std::string et std::istringstream.
    J'arrive à identiifer les éléments de la première ligne, mais après je n'arrive pas à faire de même pour les autres lignes.
    Voici le code.
    Code C++ : 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
    #include <iostream>
    #include <sstream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        string buffer;
        string item;
        istringstream ss;
        int i = 1;
     
        while(getline(cin, buffer)) {
            cout << "line " << i << endl;
            cout << buffer << endl;
            ss.str(buffer);
            while(ss >> item)
                cout << item << endl;
            i++;
        }
     
        return 0;
    }
    Voici le contenu du fichier de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    + 3 4
    - x x
    * - 6 + x
    Et j'obtiens comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    line 1
    + 3 4
    +
    3
    4
    line 2
    - x x
    line 3
    * - 6 + x

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Solution trouvée !
    Il faut réinitialiser le istringstream à chaque fin de boucle
    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
    #include <iostream>
    #include <sstream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        string buffer;
        string item;
        istringstream ss;
        int i = 1;
     
        while(getline(cin, buffer)) {
            cout << "line " << i << endl;
            cout << buffer << endl;
            ss.str(buffer);
            while(ss >> item)
                cout << item << endl;
            i++;
            ss.str(std::string());
            ss.clear();
        }
     
        return 0;
    }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    - en limitant les variables a leur portee, tu n'aurais pas ce probleme
    - ss.str(std::string()); est inutile et ss.clear(); suffit
    - ss.str(buffer); ecrase l'ancienne valeur avec la valeur passee en parametre mais ne met pas a jour les flags d'etat du stream, c'est a ce moment-la qu'il faut faire un clear (mais je te renvois surtout sur le premier point)
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. [POO] PHP5 : Problème avec les classes
    Par fleur_de_rose dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2006, 19h09
  2. Problème avec une classe... "without object"
    Par z980x dans le forum C++
    Réponses: 8
    Dernier message: 27/04/2006, 16h00
  3. [PHPMailer] problème avec la classe phpmailer
    Par sansouna24 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/04/2006, 16h51
  4. Problème avec la classe Calendar
    Par afrikha dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/03/2006, 08h48
  5. Réponses: 9
    Dernier message: 25/09/2005, 16h33

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