#include <iostream>
#include <string>
#include <vector>
#include <sstream>
struct csv_whitespace : std::ctype<char> {
static const mask* make_table() {
static std::vector<mask> v(classic_table(), classic_table() + table_size);
v[','] |= space;
v[' '] &= ~space;
return &v[0];
}
csv_whitespace(std::size_t refs = 0) : std::ctype<char>{ make_table(), false, refs } { }
};
int main() {
std::string str("1,2,3,4,5,6,7,8,9,10");
std::stringstream ss(str);
auto loc = ss.getloc();
ss.imbue(std::locale(loc, new csv_whitespace));
std::size_t N = 3;
while(N--) {
std::string a;
ss >> a;
std::cout << a << '\n';
}
ss.ignore();
ss.imbue(loc);
std::string rest;
ss >> rest;
std::cout << "Rest: " << rest << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KCnN0cnVjdCBjc3Zfd2hpdGVzcGFjZSA6IHN0ZDo6Y3R5cGU8Y2hhcj4gewogICAgc3RhdGljIGNvbnN0IG1hc2sqIG1ha2VfdGFibGUoKSB7CiAgICAgICAgc3RhdGljIHN0ZDo6dmVjdG9yPG1hc2s+IHYoY2xhc3NpY190YWJsZSgpLCBjbGFzc2ljX3RhYmxlKCkgKyB0YWJsZV9zaXplKTsKICAgICAgICB2WycsJ10gfD0gc3BhY2U7CiAgICAgICAgdlsnICddICY9IH5zcGFjZTsKICAgICAgICByZXR1cm4gJnZbMF07CiAgICB9CiAgICAKICAgIGNzdl93aGl0ZXNwYWNlKHN0ZDo6c2l6ZV90IHJlZnMgPSAwKSA6IHN0ZDo6Y3R5cGU8Y2hhcj57IG1ha2VfdGFibGUoKSwgZmFsc2UsIHJlZnMgfSB7IH0KfTsKCmludCBtYWluKCkgewogICAgc3RkOjpzdHJpbmcgc3RyKCIxLDIsMyw0LDUsNiw3LDgsOSwxMCIpOwogICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Moc3RyKTsKICAgIGF1dG8gbG9jID0gc3MuZ2V0bG9jKCk7CiAgICBzcy5pbWJ1ZShzdGQ6OmxvY2FsZShsb2MsIG5ldyBjc3Zfd2hpdGVzcGFjZSkpOwogICAgc3RkOjpzaXplX3QgTiA9IDM7CiAgICB3aGlsZShOLS0pIHsKICAgIAlzdGQ6OnN0cmluZyBhOwogICAgCXNzID4+IGE7CiAgICAJc3RkOjpjb3V0IDw8IGEgPDwgJ1xuJzsKICAgIH0KICAgIHNzLmlnbm9yZSgpOwogICAgc3MuaW1idWUobG9jKTsKICAgIHN0ZDo6c3RyaW5nIHJlc3Q7CiAgICBzcyA+PiByZXN0OwogICAgc3RkOjpjb3V0IDw8ICJSZXN0OiAiIDw8IHJlc3QgPDwgIlxuIjsKfQ==