2009-03-19 17 views

cevap

138

yourStringStream.str()

10

Bellekten std :: string değerini almak için stringstream :: str() yöntemini çağırırsınız.

66

kullanımı .str()-method:

yatan teli nesnesinin içeriğini yönetir.

1) rdbuf()->str() numaralı telefonu arayarak temel dizenin bir kopyasını döndürür.

2) ... sanki rdbuf()->str(new_str) arayarak yatan dize içeriğini değiştirir

Notlar

str tarafından döndürülen yatan dize kopya olarak tahrip edilecek geçici bir nesne olduğunu ifade ucu, bu nedenle, doğrudan ... bir sarkan işaretçi sonuçları (auto *ptr = out.str().c_str(); örneğin) str() sonucuna c_str() çağrı

+6

+1, diğer eşdeğer yanıtlardan farklı olarak bir bağlantı sağladığınız için. – rmeador

-2

strstream arabellekini .str() yöntemini çağırmadan önce '\ 0' ile sonlandırmanız gerektiğini eklemek isterim. Aksi halde dizgiyi dökerken kötü karakterler alırsınız. Aradığınız yöntemdir.

+4

Bu durum böyle görünmüyor. – Carcigenicate

+0

Stringstream ve [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/) arasında kafanız karışıyor. –

+0

Anlaşılan, bu strstream değil stringstream açıklanmaktadır. – bpeikes

9

std::stringstream::str(), sizin yönteminizdir. std::stringstream ile

:

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

std::stringstream daha genel bir araçtır. Bu özel iş için daha özel bir sınıf olan std::ostringstream'u kullanabilirsiniz.

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

dizelerin std::wstring türüyle çalışıyorsanız, siz std::wstringstream veya std::wostringstream yerine tercih edilmelidir. Eğer string karakter tipi çalışma zamanı olabilir seçilebilir istiyorsanız

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

, ayrıca bir şablon değişkeni yapmalıdır.

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

üzerindeki tüm yöntemler için aşağıdaki iki başlık dosyaları içermelidir. Yukarıda da std::string veya std::wstring olarak geçirilebilir örneklerde argüman NumericValue sırasıyla std::ostringstream ve std::wostringstream örneklerle kullanılacak

#include <string> 
#include <sstream> 

not edin. NumericValue'un sayısal bir değer olması gerekli değildir.

+2

Böylesine korkunç bir quesiton için bu çok fazla çaba. –