在C++中如何将stringstream转换为string?

177

我该如何在C ++中从std :: stringstream转换为std :: string

我需要在字符串流上调用一个方法吗?

4个回答

289

​​​​​​​

yourStringStream.str()

82

使用 .str() 方法:

管理底层字符串对象的内容。

1) 返回底层字符串的副本,就像调用 rdbuf()->str() 一样。

2) 替换底层字符串的内容,就像调用 rdbuf()->str(new_str) 一样...

注意事项

str 返回的底层字符串副本是一个临时对象,在表达式结束时将被销毁,因此直接在 str() 的结果上调用 c_str()(例如在 auto *ptr = out.str().c_str(); 中)会导致悬空指针...


18

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::stringstd::wstring传递,以与分别使用的std::ostringstreamstd::wostringstream实例一起使用。 NumericValue不必是数值类型。

11

记忆中,你可以调用stringstream::str()来获取std::string类型的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接