Jak przekonwertować z std::stringstream
na std::string
w C++?Jak przekonwertować stringstream na ciąg w C++?
Czy muszę wywołać metodę w strumieniu napisów?
Jak przekonwertować z std::stringstream
na std::string
w C++?Jak przekonwertować stringstream na ciąg w C++?
Czy muszę wywołać metodę w strumieniu napisów?
yourStringStream.str()
Z pamięci wywołujesz stringstream :: str(), aby uzyskać wartość std :: string.
Użyj .str()-method:
Zarządza zawartość bazowego obiektu String.
1) Zwraca kopię bazowego ciągu, jak gdyby wywołując
rdbuf()->str()
.2) zastępuje zawartość podstawowej ciąg jakby nazywając
rdbuf()->str(new_str)
...Uwagi
Kopia napisu bazowego zwróconej przez słowo jest tymczasowy obiekt zostanie zniszczona przy koniec wyrazu, tak bezpośrednio dzwoniąc
c_str()
na skutekstr()
(na przykład wauto *ptr = out.str().c_str();
) powoduje dangling wskaźnik ...
+1, ponieważ podałeś link, w przeciwieństwie do innych równoważnych odpowiedzi. – rmeador
Chciałbym dodać, że przed wywołaniem metody .str() należy zakończyć bufor strstream za pomocą "\ 0". W przeciwnym razie otrzymasz złe znaki podczas zrzucania struny.
Nie wydaje się, żeby tak było. – Carcigenicate
Dajesz się zdezorientować między stringstream i [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/). –
Uzgodnione, to jest opisywanie strumienia, a nie strumienia. – bpeikes
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ólne narzędzie. Możesz użyć bardziej wyspecjalizowanej klasy std::ostringstream
dla 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
rodzaju strun, trzeba wolą std::wstringstream
lub std::wostringstream
zamiast.
template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
std::wostringstream woss;
woss << NumericValue;
return woss.str();
}
Jeśli chcesz, aby typ twojego łańcucha mógł być wybierany w czasie pracy, powinieneś go również ustawić 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();
}
Dla wszystkich powyższych metod należy dołączyć następujące dwa pliki nagłówkowe.
#include <string>
#include <sstream>
zauważyć, że argument NumericValue
w przykładach powyżej, mogą być również przekazywane jako std::string
lub std::wstring
być stosowane z przypadkach std::ostringstream
i std::wostringstream
odpowiednio. Nie jest konieczne, aby wartość NumericValue
była wartością numeryczną.
To zbyt dużo wysiłku na tak straszny quesiton. –
Czy przeczytałeś odpowiedzi na poprzednie pytanie, które dotyczyło tego? –