Comment convertir un flux de chaîne en chaîne en C ++?


124

Comment puis-je convertir de std::stringstreamla std::stringen C ++?

Dois-je appeler une méthode sur le flux de chaînes?


4
Avez-vous lu les réponses à votre question précédente, qui couvrait cela?

Réponses:



74

Utilisez la méthode .str () :

Gère le contenu de l'objet chaîne sous-jacent.

1) Renvoie une copie de la chaîne sous-jacente comme si en appelant rdbuf()->str().

2) Remplace le contenu de la chaîne sous-jacente comme si en appelant rdbuf()->str(new_str)...

Remarques

La copie de la chaîne sous-jacente retournée par str est un objet temporaire qui sera détruit à la fin de l'expression, donc l'appel direct c_str()sur le résultat de str()(par exemple dans auto *ptr = out.str().c_str();) entraîne un pointeur pendant ...


14

std::stringstream::str() est la méthode que vous recherchez.

Avec std::stringstream:

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::stringstream ss;
    ss << NumericValue;
    return ss.str();
}

std::stringstreamest un outil plus générique. Vous pouvez utiliser la classe la plus spécialisée std::ostringstreampour ce travail spécifique.

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::ostringstream oss;
    oss << NumericValue;
    return oss.str();
}

Si vous travaillez avec des std::wstringtypes de chaînes, vous devez préférer std::wstringstreamou à la std::wostringstreamplace.

template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
    std::wostringstream woss;
    woss << NumericValue;
    return woss.str();
}

si vous souhaitez que le type de caractère de votre chaîne puisse être sélectionné au moment de l'exécution, vous devez également en faire une variable de modèle.

template <class CharType, class NumType>
std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
{
    std::basic_ostringstream<CharType> oss;
    oss << NumericValue;
    return oss.str();
}

Pour toutes les méthodes ci-dessus, vous devez inclure les deux fichiers d'en-tête suivants.

#include <string>
#include <sstream>

Notez que l'argument NumericValuedes exemples ci-dessus peut également être passé en tant que std::stringou std::wstringpour être utilisé avec les instances std::ostringstreamet std::wostringstreamrespectivement. Il n'est pas nécessaire que le NumericValuesoit une valeur numérique.


10

De mémoire, vous appelez stringstream::str()pour obtenir la std::stringvaleur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.