2009-03-19 19 views

Odpowiedz

138

yourStringStream.str()

10

Z pamięci wywołujesz stringstream :: str(), aby uzyskać wartość std :: string.

66

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 skutek str() (na przykład w auto *ptr = out.str().c_str();) powoduje dangling wskaźnik ...

+6

+1, ponieważ podałeś link, w przeciwieństwie do innych równoważnych odpowiedzi. – rmeador

-2

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.

+4

Nie wydaje się, żeby tak było. – Carcigenicate

+0

Dajesz się zdezorientować między stringstream i [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/). –

+0

Uzgodnione, to jest opisywanie strumienia, a nie strumienia. – bpeikes

9

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ą.

+2

To zbyt dużo wysiłku na tak straszny quesiton. –