Comment puis-je convertir de std::stringstream
à std::string
en C++?
Dois-je appeler une méthode sur le flux de chaîne?
votreStringStream.str ()
Utilisez la méthode . Str () - :
Gère le contenu de l'objet chaîne sous-jacent.
1) Retourne une copie de la chaîne sous-jacente comme en appelant
rdbuf()->str()
.2) Remplace le contenu de la chaîne sous-jacente comme en appelant
rdbuf()->str(new_str)
...Notes
La copie de la chaîne sous-jacente renvoyée par str est un objet temporaire qui sera détruit à la fin de l'expression. Appelez donc directement
c_str()
sur le résultat destr()
(par exemple, dansauto *ptr = out.str().c_str();
) génère un pointeur en suspens ...
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::stringstream
est un outil plus générique. Vous pouvez utiliser la classe plus spécialisée std::ostringstream
pour 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 std::wstring
type de chaîne, vous devez préférer std::wstringstream
ou std::wostringstream
au lieu.
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 NumericValue
dans les exemples ci-dessus peut également être passé sous la forme std::string
ou std::wstring
à utiliser avec le std::ostringstream
et std::wostringstream
_ instances respectivement. Il n'est pas nécessaire que NumericValue
soit une valeur numérique.
De mémoire, vous appelez stringstream :: str () pour obtenir la valeur std :: string.