em hiểu nó là 1 kiểu dữ liệu dùng để biến chuỗi thành stream như cin/cout ấy :V
edit: nhầm ostringstream với istringstream :V :V
istringstream thì biến string thành kiểu mới giống như cin
ostringstream thì tạo 1 biến mới giống như cout, dùng để format các kiểu dữ liệu khác thành kiểu chuỗi :V
stringstream thì vừa cin vừa cout dùng dễ nhầm lẫn lắm :V
code trên có thể xài std::istringstream
là đủ, lúc khởi tạo thì biến chuỗi chuoi
thành std::istringstream iss(chuoi);
là được
cách hoạt động thì có thể nó là 1 chuỗi tạm gọi là buffer
thôi :V nó xài 1 con trỏ hoặc 1 số nguyên ví dụ bufferIndex
để lưu vị trí hiện tại của kí tự trong buffer
, từ đó mà extract ra đúng kí tự tiếp theo.
ví dụ
std::string line = "ab cdef";
std::istringstream iss(line); // biến chuỗi line thành input stream, thực chất có thể là copy chuỗi line vào chuỗi iss.buffer, và gán iss.bufferIndex = 0
std::vector<std::string> words;
for (std::string word; iss >> word;) { // iss >> word gọi ví dụ iss.peek() là lấy ra
// ký tự iss.buffer[bufferIndex], nếu ký tự đó là
// khoảng trắng thì ko lấy nữa, còn nếu ko phải
// là khoảng trắng thì gọi iss.get() là lấy
// iss.buffer[bufferIndex] và tăng ++bufferIndex
// để tiếp tục đọc ký tự tiếp theo. Nếu bufferIndex
// >= buffer.size() thì dừng và set flag iss.eof = true
words.push_back(word);
}