51 votes

changer le délimiteur pour cin (c++)

J'ai redirigé "cin" pour lire à partir d'un flux de fichiers cin.rdbug(inF.rdbug()) Lorsque j'utilise l'opérateur d'extraction, il lit jusqu'à ce qu'il atteigne un espace blanc.

Est-il possible d'utiliser un autre délimiteur ? J'ai parcouru l'api dans cplusplus.com, mais je n'ai rien trouvé.

23voto

Ben Voigt Points 151460

Pour les chaînes, vous pouvez utiliser les std::getline pour lire en utilisant un délimiteur différent.

Pour l'extraction de nombres, le délimiteur n'est pas vraiment un "espace blanc" pour commencer, mais tout caractère invalide dans un nombre.

3voto

Josh C Points 855

Il s'agit d'une amélioration par rapport à la réponse de Jon et à l'exemple de cppreference.com . Cela suit donc le même principe que les deux, mais les combine avec des délimiteurs paramétrés.

 struct delimiter_ctype : std::ctype<char> {
    static const mask* make_table(std::string delims)
    {
        // make a copy of the "C" locale table
        static std::vector<mask> v(classic_table(), classic_table() + table_size);
        for(mask m : v){
            m &= ~space;
        }
        for(char d : delims){
            v[d] |= space;
        }
        return &v[0];
    }
    delimiter_ctype(std::string delims, ::size_t refs = 0) : ctype(make_table(delims), false, refs) {}
};

À votre santé!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X