Làm cách nào để chuyển đổi từ stringstream sang string trong C ++?


124

Làm cách nào để chuyển đổi từ std::stringstreamsang std::stringtrong C ++?

Tôi có cần gọi một phương thức trên luồng chuỗi không?


4
Bạn đã đọc các câu trả lời cho câu hỏi trước của bạn, câu trả lời cho câu hỏi này chưa?

Câu trả lời:



74

Sử dụng phương thức .str () - :

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

1) Trả về bản sao của chuỗi bên dưới như thể bằng cách gọi rdbuf()->str().

2) Thay thế nội dung của chuỗi bên dưới 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ẽ bị hủy ở cuối biểu thức, vì vậy việc gọi trực tiếp c_str()kết quả của str()(ví dụ: in auto *ptr = out.str().c_str();) dẫn đến một con trỏ treo lơ lửng ...


14

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::stringstreamlà 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::ostringstreamcho 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::wstringloại chuỗi, bạn phải thích std::wstringstreamhoặc std::wostringstreamthay 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ự trong chuỗi của mình có thể chọn được trong thời gian chạy, bạn cũng nên đặt nó thành một 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, đối số NumericValuetrong các ví dụ trên cũng có thể được chuyển dưới dạng std::stringhoặc std::wstringđược sử dụng với các phiên bản std::ostringstreamstd::wostringstreamphiên bản tương ứng. Nó không cần thiết NumericValuephải là một giá trị số.


10

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.