Come si converte da stringstream a string in C ++?


124

Come posso convertire da std::stringstreama std::stringin C ++?

Devo chiamare un metodo sul flusso di stringhe?


4
Hai letto le risposte alla tua domanda precedente, che copriva questo?

Risposte:



74

Usa il metodo .str () :

Gestisce il contenuto dell'oggetto stringa sottostante.

1) Restituisce una copia della stringa sottostante come se chiamasse rdbuf()->str().

2) Sostituisce il contenuto della stringa sottostante come se chiamasse rdbuf()->str(new_str)...

Appunti

La copia della stringa sottostante restituita da str è un oggetto temporaneo che verrà distrutto alla fine dell'espressione, quindi invocare direttamente c_str()il risultato di str()(ad esempio in auto *ptr = out.str().c_str();) si traduce in un puntatore penzolante ...


14

std::stringstream::str() è il metodo che stai cercando.

Con std::stringstream:

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

std::stringstreamè uno strumento più generico. Puoi usare la classe più specializzata std::ostringstreamper questo lavoro specifico.

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

Se stai lavorando con il std::wstringtipo di stringhe, devi preferire std::wstringstreamo std::wostringstreaminvece.

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

se vuoi che il tipo di carattere della tua stringa possa essere selezionabile in fase di esecuzione, dovresti anche renderlo una variabile modello.

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

Per tutti i metodi precedenti, è necessario includere i seguenti due file di intestazione.

#include <string>
#include <sstream>

Si noti che l'argomento NumericValuenegli esempi precedenti può anche essere passato come std::stringo std::wstringper essere utilizzato rispettivamente con le istanze std::ostringstreame std::wostringstream. Non è necessario NumericValueche sia un valore numerico.


10

Dalla memoria, chiami stringstream::str()per ottenere il std::stringvalore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.