2009-03-19 10 views

Répondre

138

yourStringStream.str()

10

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

66

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 de str() (par exemple dans auto *ptr = out.str().c_str();) se traduit par un pointeur ballants ...

+6

+1 parce que vous avez fourni un lien, contrairement aux autres réponses équivalentes. – rmeador

-2

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.

+4

Cela ne semble pas être le cas. – Carcigenicate

+0

Vous êtes confus entre stringstream et [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/). –

+0

D'accord, cela décrit strstream pas stringstream. – bpeikes

9

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.

+2

C'est beaucoup trop d'effort pour une si terrible question. –

Questions connexes