Como faço para converter de stringstream para string em C ++?

124

Como faço para converter de std::stringstreampara std::stringem C ++?

Preciso chamar um método no fluxo de strings?

Nick Bolton
fonte
4
Você leu as respostas à sua pergunta anterior, que abordava isso?

Respostas:

205

O que outras pessoas estão dizendo

yourStringStream.str()
Tyler McHenry
fonte
74

Use o método .str () - :

Gerencia o conteúdo do objeto de cadeia subjacente.

1) Retorna uma cópia da sequência subjacente como se estivesse chamando rdbuf()->str().

2) Substitui o conteúdo da cadeia subjacente como se chamando rdbuf()->str(new_str)...

Notas

A cópia da string subjacente retornada por str é um objeto temporário que será destruído no final da expressão, portanto, chamar diretamente c_str()o resultado de str()(por exemplo, em auto *ptr = out.str().c_str();) resulta em um ponteiro pendente ...

Emil H
fonte
14

std::stringstream::str() é o método que você está procurando.

Com std::stringstream:

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::stringstream ss;
    ss << NumericValue;
    return ss.str();
}

std::stringstreamé uma ferramenta mais genérica. Você pode usar a classe mais especializada std::ostringstreampara este trabalho específico.

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::ostringstream oss;
    oss << NumericValue;
    return oss.str();
}

Se você estiver trabalhando com std::wstringtipos de strings, deverá preferir std::wstringstreamou std::wostringstreamnão.

template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
    std::wostringstream woss;
    woss << NumericValue;
    return woss.str();
}

se você quiser que o tipo de caractere da sua sequência possa ser selecionável em tempo de execução, você também deve torná-la uma variável de modelo.

template <class CharType, class NumType>
std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
{
    std::basic_ostringstream<CharType> oss;
    oss << NumericValue;
    return oss.str();
}

Para todos os métodos acima, você deve incluir os dois arquivos de cabeçalho a seguir.

#include <string>
#include <sstream>

Observe que o argumento NumericValuenos exemplos acima também pode ser passado como std::stringou std::wstringpara ser usado com as instâncias std::ostringstreame, std::wostringstreamrespectivamente. Não é necessário NumericValueque seja um valor numérico.

hkBattousai
fonte
10

A partir da memória, você liga stringstream::str()para obter o std::stringvalor.

Timo Geusch
fonte