Jak konwertować z std::stringstream
do std::string
w C ++?
Czy muszę wywołać metodę w strumieniu ciągów?
Jak konwertować z std::stringstream
do std::string
w C ++?
Czy muszę wywołać metodę w strumieniu ciągów?
Odpowiedzi:
Wcześniejsze
yourStringStream.str()
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()
wynikustr()
(na przykład inauto *ptr = out.str().c_str();
) skutkuje wiszącym wskaźnikiem ...
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::stringstream
jest bardziej ogólnym narzędziem. Możesz użyć bardziej wyspecjalizowanej klasy std::ostringstream
do 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::wstring
typami łańcuchów, musisz preferować std::wstringstream
lub std::wostringstream
zamiast 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 NumericValue
w powyższych przykładach można również przekazać jako std::string
lub w std::wstring
celu użycia odpowiednio z wystąpieniami std::ostringstream
i std::wostringstream
. Nie jest konieczne, NumericValue
aby był wartością liczbową.
Z pamięci wzywasz, stringstream::str()
aby wydobyć std::string
wartość.