Wie konvertiere ich in C ++ von Stringstream zu String?

123

Wie konvertiere ich in C ++ von std::stringstreamnach std::string?

Muss ich eine Methode für den String-Stream aufrufen?

Nick Bolton
quelle
4
Haben Sie die Antworten auf Ihre vorherige Frage gelesen, die dies abdeckte?

Antworten:

202

Wenn Sie

yourStringStream.str()
Tyler McHenry
quelle
74

Verwenden Sie die .str () - Methode :

Verwaltet den Inhalt des zugrunde liegenden Zeichenfolgenobjekts.

1) Gibt eine Kopie der zugrunde liegenden Zeichenfolge wie beim Aufruf zurück rdbuf()->str().

2) Ersetzt den Inhalt der zugrunde liegenden Zeichenfolge wie durch Aufrufen von rdbuf()->str(new_str)...

Anmerkungen

Die von str zurückgegebene Kopie der zugrunde liegenden Zeichenfolge ist ein temporäres Objekt, das am Ende des Ausdrucks zerstört wird. Wenn Sie also c_str()das Ergebnis von str()(z. B. in auto *ptr = out.str().c_str();) direkt aufrufen, wird ein baumelnder Zeiger angezeigt.

Emil H.
quelle
14

std::stringstream::str() ist die Methode, nach der Sie suchen.

Mit std::stringstream:

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::stringstream ss;
    ss << NumericValue;
    return ss.str();
}

std::stringstreamist ein allgemeineres Werkzeug. Sie können die speziellere Klasse std::ostringstreamfür diesen bestimmten Job verwenden.

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::ostringstream oss;
    oss << NumericValue;
    return oss.str();
}

Wenn Sie mit std::wstringZeichenfolgentypen arbeiten, müssen Sie dies bevorzugen std::wstringstreamoder std::wostringstreamstattdessen.

template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
    std::wostringstream woss;
    woss << NumericValue;
    return woss.str();
}

Wenn Sie möchten, dass der Zeichentyp Ihrer Zeichenfolge zur Laufzeit auswählbar ist, sollten Sie ihn auch zu einer Vorlagenvariablen machen.

template <class CharType, class NumType>
std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
{
    std::basic_ostringstream<CharType> oss;
    oss << NumericValue;
    return oss.str();
}

Für alle oben genannten Methoden müssen Sie die folgenden zwei Header-Dateien einschließen.

#include <string>
#include <sstream>

Beachten Sie, dass das Argument NumericValuein den obigen Beispielen auch als std::stringoder std::wstringfür die Instanzen std::ostringstreamund übergeben std::wostringstreamwerden kann. Es ist nicht erforderlich, dass der NumericValueWert numerisch ist.

hkBattousai
quelle
10

Aus dem Speicher rufen Sie stringstream::str()auf, um den std::stringWert herauszuholen.

Timo Geusch
quelle