Bagaimana cara mengonversi dari stringstream ke string di C ++?

124

Bagaimana cara mengubah dari std::stringstreamke std::stringdalam C ++?

Apakah saya perlu memanggil metode pada aliran string?

Nick Bolton
sumber
4
Apakah Anda membaca jawaban atas pertanyaan Anda sebelumnya, yang mencakup ini?

Jawaban:

205

</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> orang </s>

yourStringStream.str()
Tyler McHenry
sumber
74

Gunakan metode .str () - :

Mengelola konten objek string yang mendasari.

1) Mengembalikan salinan string yang mendasari seolah-olah dengan memanggil rdbuf()->str().

2) Mengganti konten string yang mendasari seolah-olah dengan memanggil rdbuf()->str(new_str)...

Catatan

Salinan string yang mendasari dikembalikan oleh str adalah objek sementara yang akan dihancurkan di akhir ekspresi, jadi langsung memanggil c_str()hasil str()(misalnya dalam auto *ptr = out.str().c_str();) hasil di penunjuk yang menggantung ...

Emil H.
sumber
14

std::stringstream::str() adalah metode yang Anda cari.

Dengan std::stringstream:

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

std::stringstreamadalah alat yang lebih umum. Anda dapat menggunakan kelas yang lebih terspesialisasi std::ostringstreamuntuk pekerjaan khusus ini.

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

Jika Anda bekerja dengan std::wstringjenis string, Anda harus memilih std::wstringstreamatau std::wostringstreamsebagai gantinya.

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

Jika Anda ingin tipe karakter string Anda dapat dipilih secara run-time, Anda juga harus menjadikannya variabel template.

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

Untuk semua metode di atas, Anda harus menyertakan dua file header berikut.

#include <string>
#include <sstream>

Perhatikan bahwa, argumen NumericValuedalam contoh di atas juga dapat diteruskan sebagai std::stringatau std::wstringdigunakan dengan masing-masing instance std::ostringstreamdan std::wostringstream. Tidak perlu NumericValuemenjadi nilai numerik.

hkBattousai
sumber
10

Dari ingatan, Anda memanggil stringstream::str()untuk mengeluarkan std::stringnilainya.

Timo Geusch
sumber