Jak przekonwertować ciąg znaków na ciąg w C ++?

124

Jak konwertować z std::stringstreamdo std::stringw C ++?

Czy muszę wywołać metodę w strumieniu ciągów?

Nick Bolton
źródło
4
Czy przeczytałeś odpowiedzi na swoje poprzednie pytanie, które to dotyczyło?

Odpowiedzi:

205

Wcześniejsze

yourStringStream.str()
Tyler McHenry
źródło
74

Użyj metody .str () - :

Zarządza zawartością bazowego obiektu ciągu.

1) Zwraca kopię podstawowego ciągu, tak jakby przez wywołanie rdbuf()->str().

2) Zastępuje zawartość podstawowego ciągu, jakby wywołując rdbuf()->str(new_str)...

Uwagi

Kopia podstawowego ciągu zwrócona przez str jest tymczasowym obiektem, który zostanie zniszczony na końcu wyrażenia, więc bezpośrednie wywołanie c_str()wyniku str()(na przykład in auto *ptr = out.str().c_str();) skutkuje wiszącym wskaźnikiem ...

Emil H.
źródło
14

std::stringstream::str() to metoda, której szukasz.

Z std::stringstream:

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

std::stringstreamjest bardziej ogólnym narzędziem. Możesz użyć bardziej wyspecjalizowanej klasy std::ostringstreamdo tego konkretnego zadania.

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

Jeśli pracujesz z std::wstringtypami łańcuchów, musisz preferować std::wstringstreamlub std::wostringstreamzamiast tego.

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

jeśli chcesz, aby typ znaku twojego ciągu mógł być wybierany w czasie wykonywania, powinieneś również ustawić go jako zmienną szablonu.

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

W przypadku wszystkich powyższych metod musisz dołączyć następujące dwa pliki nagłówkowe.

#include <string>
#include <sstream>

Należy zauważyć, że argument NumericValuew powyższych przykładach można również przekazać jako std::stringlub w std::wstringcelu użycia odpowiednio z wystąpieniami std::ostringstreami std::wostringstream. Nie jest konieczne, NumericValueaby był wartością liczbową.

hkBattousai
źródło
10

Z pamięci wzywasz, stringstream::str()aby wydobyć std::stringwartość.

Timo Geusch
źródło