如何在C ++中从stringstream转换为字符串?

时间:2009-03-19 16:37:09

标签: c++ string stringstream

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

我是否需要在字符串流上调用方法?

5 个答案:

答案 0 :(得分:172)

yourStringStream.str()

答案 1 :(得分:73)

使用.str()-method

  

管理基础字符串对象的内容。

     

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

     

2)替换基础字符串的内容,就像调用rdbuf()->str(new_str) ...

一样      

备注

     

str返回的基础字符串的副本是一个临时对象,它将在表达式的末尾被破坏,因此直接调用str() auto *ptr = out.str().c_str();的结果(例如在{{} 1}})导致悬空指针...

答案 2 :(得分:12)

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::wstringstreamstd::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没有必要是数值。

答案 3 :(得分:10)

从内存中,调用stringstream :: str()来获取std :: string值。

答案 4 :(得分:-2)

我想补充一点,你必须在调用.str()方法之前用'\ 0'终止strstream缓冲区。否则在转储字符串时会出现错误的字符。