Comment puis-je convertir de std::stringstream
la std::string
en C ++?
Dois-je appeler une méthode sur le flux de chaînes?
Comment puis-je convertir de std::stringstream
la std::string
en C ++?
Dois-je appeler une méthode sur le flux de chaînes?
Réponses:
yourStringStream.str()
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 destr()
(par exemple dansauto *ptr = out.str().c_str();
) entraîne un pointeur pendant ...
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 la 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 des std::wstring
types de chaînes, vous devez préférer std::wstringstream
ou à la std::wostringstream
place.
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
des exemples ci-dessus peut également être passé en tant que std::string
ou std::wstring
pour être utilisé avec les instances std::ostringstream
et std::wostringstream
respectivement. Il n'est pas nécessaire que le NumericValue
soit une valeur numérique.
De mémoire, vous appelez stringstream::str()
pour obtenir la std::string
valeur.