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


123

如何在C ++中从转换std::stringstreamstd::string

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


4
您是否已阅读对上一个问题的答复(涵盖此内容)?

Answers:



74

使用.str()方法

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

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

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

笔记

由STR返回的基础字符串的副本,将在表达式的结尾被破坏,所以直接调用临时对象c_str()上的结果str()(例如,在auto *ptr = out.str().c_str();以悬空指针)结果...


14

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::string或与实例std::wstring一起使用。不必为数字值。std::ostringstreamstd::wostringstreamNumericValue


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.