Comment puis-je convertir de std::stringstream
en std::string
en C++? Dois-je appeler une méthode sur le flux de chaînes?Comment convertir une chaîne strings en chaîne en C++?
Répondre
yourStringStream.str()
De la mémoire, vous appelez stringstream :: str() pour obtenir la valeur std :: string.
Utilisez le .str()-method:
gère le contenu de l'objet chaîne sous-jacente.
1) Renvoie une copie de la chaîne sous-jacente comme si elle appelait
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 à destructed la fin de l'expression, afin d'appeler directement
c_str()
sur le résultat destr()
(par exemple dansauto *ptr = out.str().c_str();
) se traduit par un pointeur ballants ...
+1 parce que vous avez fourni un lien, contrairement aux autres réponses équivalentes. – rmeador
Je voudrais ajouter que vous devez terminer le tampon strstream avec '\ 0' avant d'appeler la méthode .str(). Sinon, vous obtiendrez de mauvais caractères lors du vidage de la chaîne.
Cela ne semble pas être le cas. – Carcigenicate
Vous êtes confus entre stringstream et [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/). –
D'accord, cela décrit strstream pas stringstream. – bpeikes
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înes, vous devez préférer std::wstringstream
ou std::wostringstream
à la place.
template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
std::wostringstream woss;
woss << NumericValue;
return woss.str();
}
si vous voulez que le type de caractère de votre chaîne pourrait être exécutée en temps sélectionnable, vous devez également 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 peuvent également être transmises comme std::string
ou std::wstring
à utiliser avec les instances respectivement std::ostringstream
et std::wostringstream
. Il n'est pas nécessaire que le NumericValue
soit une valeur numérique.
C'est beaucoup trop d'effort pour une si terrible question. –
Avez-vous lu les réponses à votre question précédente, qui couvrait cela? –