Làm cách nào để chuyển đổi từ std::stringstream
sang std::string
trong C ++?
Tôi có cần gọi một phương thức trên luồng chuỗi không?
Làm cách nào để chuyển đổi từ std::stringstream
sang std::string
trong C ++?
Tôi có cần gọi một phương thức trên luồng chuỗi không?
Câu trả lời:
Các bác sĩ cho biết:
yourStringStream.str()
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ủastr()
(ví dụ: inauto *ptr = out.str().c_str();
) dẫn đến một con trỏ treo lơ lửng ...
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 chuỗi, 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ự 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ố NumericValue
trong các ví dụ trên cũng có thể được chuyển dưới dạng std::string
hoặc std::wstring
được sử dụng với các phiên bản std::ostringstream
và std::wostringstream
phiên bản tương ứng. Nó không cần thiết NumericValue
phải là một giá trị số.
Từ bộ nhớ, bạn gọi stringstream::str()
để lấy std::string
giá trị ra.