2009-03-19 38 views

Trả lời

138

yourStringStream.str()

10

Từ bộ nhớ, bạn gọi stringstream :: str() để lấy giá trị chuỗi std :: out.

66

Sử dụng .str()-method:

Quản lý nội dung của đối tượng chuỗi bên dưới.

1) Trả lại bản sao của chuỗi cơ bản như thể bằng cách gọi rdbuf()->str().

2) Thay thế các nội dung của chuỗi cơ bản như thể bằng cách gọi rdbuf()->str(new_str) ...

Ghi chú

Bản sao của chuỗi cơ bản được trả về bởi str là một đối tượng tạm thời sẽ được destructed tại cuối của biểu thức, vì vậy trực tiếp gọi c_str() trên kết quả của str() (ví dụ như trong auto *ptr = out.str().c_str();) kết quả trong một con trỏ tòn ten ...

+6

+1 vì bạn đã cung cấp liên kết, không giống như các câu trả lời tương đương khác. – rmeador

-2

Tôi muốn thêm rằng bạn phải chấm dứt bộ đệm strstream với '\ 0' trước khi gọi phương thức .str(). Nếu không, bạn sẽ nhận được các ký tự xấu khi bán phá giá chuỗi.

+4

Điều này có vẻ không đúng. – Carcigenicate

+0

Bạn đang bị lẫn lộn giữa chuỗi và [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/). –

+0

Đồng ý, đây là mô tả strstream không stringstream. – bpeikes

9

std::stringstream::str() là phương pháp bạn đang tìm kiếm.

Với std::stringstream:

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

std::stringstream là một công cụ chung chung hơn. Bạn có thể sử dụng lớp chuyên biệt hơn std::ostringstream cho công việc cụ thể này.

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

Nếu bạn đang làm việc với std::wstring loại dây, bạn phải thích std::wstringstream hoặc std::wostringstream để thay thế.

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

nếu bạn muốn loại ký tự của chuỗi có thể được chọn thời gian chạy, bạn cũng nên biến nó thành biến mẫu.

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

Đối với tất cả các phương pháp trên, bạn phải bao gồm hai tệp tiêu đề sau.

#include <string> 
#include <sstream> 

Lưu ý rằng, lập luận NumericValue trong các ví dụ trên cũng có thể được thông qua như std::string hoặc std::wstring để được sử dụng với std::ostringstreamstd::wostringstream trường hợp tương ứng. Không cần thiết cho NumericValue là giá trị số.

+2

Đây là nỗ lực quá nhiều cho một quesiton khủng khiếp như vậy. –

Các vấn đề liên quan