【发布时间】:2023-03-24 14:19:01
【问题描述】:
如何在 C++ 中将 std::stringstream 转换为 std::string?
我需要在字符串流上调用方法吗?
【问题讨论】:
-
您是否阅读了对上一个问题的回复,其中涵盖了这一点?
标签: c++ string stringstream
如何在 C++ 中将 std::stringstream 转换为 std::string?
我需要在字符串流上调用方法吗?
【问题讨论】:
标签: c++ string stringstream
yourStringStream.str()
【讨论】:
管理底层字符串对象的内容。
1) 如同调用
rdbuf()->str()一样返回底层字符串的副本。2) 替换底层字符串的内容,就像调用
rdbuf()->str(new_str)...备注
str返回的底层字符串的副本是一个临时对象,会在表达式结束时被销毁,所以直接在
str()的结果上调用c_str()(例如auto *ptr = out.str().c_str();)会导致一个悬空指针...
【讨论】:
std::stringstream::str() 是您正在寻找的方法。
std::stringstream:
template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
std::stringstream ss;
ss << NumericValue;
return ss.str();
}
std::stringstream 是一个更通用的工具。您可以使用更专业的类std::ostringstream 来完成这项特定的工作。
template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
std::ostringstream oss;
oss << NumericValue;
return oss.str();
}
如果您使用std::wstring 类型的字符串,则必须改用std::wstringstream 或std::wostringstream。
template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
std::wostringstream woss;
woss << NumericValue;
return woss.str();
}
如果您希望字符串的字符类型可以在运行时选择,您还应该将其设为模板变量。
template <class CharType, class NumType>
std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
{
std::basic_ostringstream<CharType> oss;
oss << NumericValue;
return oss.str();
}
以上所有方法,都必须包含以下两个头文件。
#include <string>
#include <sstream>
请注意,上述示例中的参数NumericValue 也可以作为std::string 或std::wstring 传递,分别与std::ostringstream 和std::wostringstream 实例一起使用。 NumericValue 不一定是数值。
【讨论】:
根据记忆,您调用 stringstream::str() 以获取 std::string 值。
【讨论】: