Làm cách nào để chuyển đổi từ std::stringstream
thành std::string
bằng C++?Làm cách nào để chuyển đổi từ chuỗi chuỗi thành chuỗi trong C++?
Tôi có cần gọi phương thức trên luồng chuỗi không?
Làm cách nào để chuyển đổi từ std::stringstream
thành std::string
bằng C++?Làm cách nào để chuyển đổi từ chuỗi chuỗi thành chuỗi trong C++?
Tôi có cần gọi phương thức trên luồng chuỗi không?
yourStringStream.str()
Từ bộ nhớ, bạn gọi stringstream :: str() để lấy giá trị chuỗi std :: out.
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ủastr()
(ví dụ như trongauto *ptr = out.str().c_str();
) kết quả trong một con trỏ tòn ten ...
+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
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.
Điều này có vẻ không đúng. – Carcigenicate
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/). –
Đồng ý, đây là mô tả strstream không stringstream. – bpeikes
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::ostringstream
và std::wostringstream
trường hợp tương ứng. Không cần thiết cho NumericValue
là giá trị số.
Đây là nỗ lực quá nhiều cho một quesiton khủng khiếp như vậy. –
Bạn đã đọc câu trả lời cho câu hỏi trước của mình, câu hỏi này có đề cập đến câu hỏi này không? –