Tôi đã thử một vài thứ rồi,
std::stringstream m;
m.empty();
m.clear();
cả hai đều không hoạt động.
Tôi đã thử một vài thứ rồi,
std::stringstream m;
m.empty();
m.clear();
cả hai đều không hoạt động.
Câu trả lời:
Đối với tất cả các loại thư viện chuẩn, hàm thành viên empty()
là một truy vấn, không phải là một lệnh, nghĩa là "bạn có trống không?" không "vui lòng vứt bỏ nội dung của bạn".
Hàm clear()
thành viên được kế thừa từ ios
và được sử dụng để xóa trạng thái lỗi của luồng, ví dụ: nếu luồng tệp có trạng thái lỗi được đặt thành eofbit
(cuối tệp), thì việc gọi clear()
sẽ đặt trạng thái lỗi trở lại goodbit
(không có lỗi) .
Để xóa nội dung của a stringstream
, sử dụng:
m.str("");
là chính xác, mặc dù sử dụng:
m.str(std::string());
là kỹ thuật hiệu quả hơn, bởi vì bạn tránh gọi hàm std::string
tạo const char*
. Nhưng bất kỳ trình biên dịch nào ngày nay sẽ có thể tạo cùng một mã trong cả hai trường hợp - vì vậy tôi sẽ chỉ đi với bất cứ thứ gì dễ đọc hơn.
Bạn có thể xóa trạng thái lỗi và làm trống tất cả chuỗi trong một dòng
std::stringstream().swap(m); // swap m with a default constructed stringstream
Điều này có hiệu quả đặt lại m về trạng thái được xây dựng mặc định
Đây phải là cách đáng tin cậy nhất bất kể trình biên dịch:
m=std::stringstream();
mm.clear(); mm.str("");
đã làm điều đó. (không có C ++ 11, trao đổi khác sẽ tốt hơn).
swap
tốt hơn chuyển nhượng?
2 xu của tôi:
điều này dường như hoạt động với tôi trong xcode và dev-c ++, tôi đã có một chương trình ở dạng menu mà nếu được thực hiện lặp theo yêu cầu của người dùng sẽ điền vào một biến chuỗi sẽ hoạt động tốt trong lần đầu tiên mã sẽ hoạt động chạy nhưng sẽ không xóa chuỗi trong lần tiếp theo người dùng sẽ chạy cùng một mã. nhưng hai dòng mã dưới đây cuối cùng đã xóa biến chuỗi chuỗi mọi lúc trước khi điền vào biến chuỗi. (2 giờ dùng thử và lỗi và tìm kiếm google), btw, sử dụng từng dòng riêng sẽ không thực hiện được.
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
Đó là một vấn đề khái niệm.
Chuỗi dòng là một luồng, vì vậy các trình lặp của nó là chuyển tiếp, không thể trả về. Trong một chuỗi đầu ra, bạn cần tuôn ra () để xác định lại nó, như trong bất kỳ luồng đầu ra nào khác.
Những thứ này không loại bỏ dữ liệu trong chuỗi chuỗi trong gnu c ++
m.str("");
m.str() = "";
m.str(std::string());
Sau đây không làm trống chuỗi cho tôi:
m.str().clear();