web-dev-qa-db-fra.com

Comment puis-je convertir de stringstream en chaîne en C ++?

Comment puis-je convertir de std::stringstream à std::string en C++?

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

111
Nick Bolton

votreStringStream.str ()

177
Tyler McHenry

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 de str() (par exemple, dans auto *ptr = out.str().c_str();) génère un pointeur en suspens ...

73
Emil H

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.

12
hkBattousai

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

10
Timo Geusch