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

SL & STL C++ Discussion :

probleme std::istringstream - espaces


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 41
    Points
    41
    Par défaut probleme std::istringstream - espaces
    Salut a tous,

    j'en fait appel a vous apres de nombreuses recherches infructueuses sur le net.

    comme du code sera plus parlant que des mots:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    std::string s1("hello world");
    std::string s2;
    std::istringstream iss(s1);
     
    iss >> s2;
     
    std::cout << s1 << std::endl;
    std::cout << s2 << std::endl;
    Pour les personnes qui ont deja teste ce genre de pratique, l'execution de ce code affichera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    hello world
    hello
    Comme vous l'avez compris, j'aimerait inhiber le systeme de "tokenization" des istringstream afin de recuperer l'integralite de la chaine.

    Afin d'etre plus clair dans ma demande, je me sert des istringstream pour gerer une recuperation de parametres stockes sous forme de std::string (pour un fichier de conf), et j'utilise l'istringstream pour faire les conversions adequates. L'avantage etant de tirer partie des templates pour gerer n'importe quel type de base sans avoir a le gerer explicitement.
    Sachant que dans tout les cas, le parametre que je souhaite recuperer, est considere comme etant en entier (donc pour une chaine je veux tout recuperer).

    voila le contexte dans lequel c'est utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    template<typename T>
    void	getVar(std::string &key, T &value)
    {
    	std::map<std::string, std::string>::iterator	i = _values.find(key);
     
    	if (i != _values.end())
    	{
    		std::istringstream	iss;
     
    		iss >> value;
    	}
    }
    Si quelqu'un possede une maniere alternative de gerer ce genre de probleme, qu'il n'hesite pas, ca m'interesse aussi

    Merci d'avance a ceux qui prendront le temps de se pencher sur mon probleme

    Bonne soiree !

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 41
    Points
    41
    Par défaut
    getline ne me fera pas ma conversion dans le cas d'un int, non?

  4. #4
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut que tu spécialises ta fonction : opérateur >> par défaut pour tout type T, et std::getline lorsque T est std::string.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonjour,

    J' ai eu la même galère avec istringstream. J'ai contourné le problème comme cela :

    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
     
    template < typename T >
    class AA
    { protected :
      T g_val  ;
      public :
     ...
     
      bool setValue( const std::string& s )
      { std::string tmp  ;
        std::string::size_type i = s.find_last_not_of( ' ' );
        if ( i != std::string::npos )
        tmp = s.substr( 0, i + 1 ) ;
        std::istringstream is( tmp );
        T v;
        if ( ! ( is >> v ) || ! is.eof() ) return false ;
        g_val = v ;
        return true;
      }
     
    };
     
     
     
    template <>
    bool AA<std::string>::setValue( const std::string& s )
    { AA<std::string>::g_val = s ;
      return true ;
    }
    Je ne sais pas si ça peut aider.

    Salut.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 41
    Points
    41
    Par défaut
    Je n'avais effectivement pas pense a la specialisation. C'est vrai que c'est surement la maniere la plus rapide de contourner le probleme.

    Merci a tous pour vos reponses !

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

Discussions similaires

  1. Probleme de Div espacé sous IE et FF
    Par Ocelyn dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 27/02/2007, 17h10
  2. Probleme champ avec espace
    Par jmjmjm dans le forum Débuter
    Réponses: 3
    Dernier message: 10/10/2006, 12h34
  3. conversion std::string en std::istringstream
    Par flipper203 dans le forum SL & STL
    Réponses: 3
    Dernier message: 06/07/2006, 19h34
  4. probleme std::find
    Par voyageur dans le forum SL & STL
    Réponses: 2
    Dernier message: 07/05/2005, 21h55
  5. std::istringstream
    Par tut dans le forum SL & STL
    Réponses: 10
    Dernier message: 31/01/2005, 11h23

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