Saya sudah mencoba beberapa hal,
std::stringstream m;
m.empty();
m.clear();
keduanya tidak bekerja.
Saya sudah mencoba beberapa hal,
std::stringstream m;
m.empty();
m.clear();
keduanya tidak bekerja.
Jawaban:
Untuk semua jenis pustaka standar, fungsi anggota empty()
adalah kueri, bukan perintah, artinya ini berarti "Anda kosong?" bukan "tolong buang konten Anda".
Fungsi clear()
anggota diwarisi dari ios
dan digunakan untuk menghapus status kesalahan aliran, misalnya jika aliran file memiliki status kesalahan diatur ke eofbit
(akhir file), maka panggilan clear()
akan mengatur status kesalahan kembali ke goodbit
(tidak ada kesalahan) .
Untuk menghapus konten a stringstream
, gunakan:
m.str("");
benar, meskipun menggunakan:
m.str(std::string());
secara teknis lebih efisien, karena Anda menghindari memohon std::string
konstruktor yang mengambil const char*
. Tetapi setiap kompiler hari ini harus dapat menghasilkan kode yang sama dalam kedua kasus - jadi saya hanya akan pergi dengan apa pun yang lebih mudah dibaca.
Anda dapat menghapus status kesalahan dan mengosongkan stringstream semua dalam satu baris
std::stringstream().swap(m); // swap m with a default constructed stringstream
Ini secara efektif me-reset m ke keadaan dibangun standar
m.str("");
sepertinya berhasil.
Ini harus menjadi cara yang paling dapat diandalkan terlepas dari kompiler:
m=std::stringstream();
mm.clear(); mm.str("");
melakukan trik. (tanpa C ++ 11, kalau tidak swap akan lebih baik).
swap
lebih baik daripada memindahkan tugas?
2 sen saya:
ini tampaknya bekerja untuk saya di xcode dan dev-c ++, saya punya program dalam bentuk menu yang jika dieksekusi secara iteratif sesuai permintaan pengguna akan mengisi variabel stringstream yang akan bekerja ok saat pertama kali kode akan jalankan tetapi tidak akan menghapus stringstream saat pengguna akan menjalankan kode yang sama. tetapi dua baris kode di bawah ini akhirnya membersihkan variabel stringstream setiap kali sebelum mengisi variabel string. (2 jam percobaan dan kesalahan dan pencarian google), btw, menggunakan setiap baris sendiri tidak akan melakukan trik.
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
Ini masalah konseptual.
Stringstream adalah aliran, jadi iteratornya maju, tidak bisa kembali. Dalam aliran string keluaran, Anda memerlukan flush () untuk menginisialisasi ulang, seperti pada aliran output lainnya.
Ini tidak membuang data dalam stringstream di gnu c ++
m.str("");
m.str() = "";
m.str(std::string());
Berikut ini tidak mengosongkan stringstream untuk saya:
m.str().clear();