#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool nextToken(const string &s, string::size_type &start, string &token)
{
token.clear();
start = s.find_first_not_of(" \t", start);
if (start == string::npos)
return false;
string::size_type end;
if (s[start] == '\'')
{
++start;
end = s.find('\'', start);
}
else
end = s.find_first_of(" \t,", start);
if (end == string::npos)
{
token = s.substr(start);
start = s.size();
}
else
{
token = s.substr(start, end-start);
if ((s[end] != ',') && ((end = s.find(',', end + 1)) == string::npos))
start = s.size();
else
start = end + 1;
}
return true;
}
int main() {
string s = "1, 10, 'abc', 'test, 1'", token;
vector<string> v;
string::size_type start = 0;
while (nextToken(s, start, token))
v.push_back(token);
for (auto &token2 : v)
cout << token2 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBuZXh0VG9rZW4oY29uc3Qgc3RyaW5nICZzLCBzdHJpbmc6OnNpemVfdHlwZSAmc3RhcnQsIHN0cmluZyAmdG9rZW4pCnsKCXRva2VuLmNsZWFyKCk7CgoJc3RhcnQgPSBzLmZpbmRfZmlyc3Rfbm90X29mKCIgXHQiLCBzdGFydCk7CglpZiAoc3RhcnQgPT0gc3RyaW5nOjpucG9zKQoJCXJldHVybiBmYWxzZTsKCglzdHJpbmc6OnNpemVfdHlwZSBlbmQ7CgoJaWYgKHNbc3RhcnRdID09ICdcJycpCgl7CgkJKytzdGFydDsKCQllbmQgPSBzLmZpbmQoJ1wnJywgc3RhcnQpOwoJfQoJZWxzZQoJCWVuZCA9IHMuZmluZF9maXJzdF9vZigiIFx0LCIsIHN0YXJ0KTsKCQoJaWYgKGVuZCA9PSBzdHJpbmc6Om5wb3MpCgl7CgkJdG9rZW4gPSBzLnN1YnN0cihzdGFydCk7CgkJc3RhcnQgPSBzLnNpemUoKTsKCX0KCWVsc2UKCXsKCQl0b2tlbiA9IHMuc3Vic3RyKHN0YXJ0LCBlbmQtc3RhcnQpOwoJCWlmICgoc1tlbmRdICE9ICcsJykgJiYgKChlbmQgPSBzLmZpbmQoJywnLCBlbmQgKyAxKSkgPT0gc3RyaW5nOjpucG9zKSkKCQkJc3RhcnQgPSBzLnNpemUoKTsKCQllbHNlCgkJCXN0YXJ0ID0gZW5kICsgMTsKCX0KCglyZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKSB7CglzdHJpbmcgcyA9ICIxLCAxMCwgJ2FiYycsICd0ZXN0LCAxJyIsIHRva2VuOwoJdmVjdG9yPHN0cmluZz4gdjsKCQoJc3RyaW5nOjpzaXplX3R5cGUgc3RhcnQgPSAwOwoJd2hpbGUgKG5leHRUb2tlbihzLCBzdGFydCwgdG9rZW4pKQoJCXYucHVzaF9iYWNrKHRva2VuKTsKCQoJZm9yIChhdXRvICZ0b2tlbjIgOiB2KQoJCWNvdXQgPDwgdG9rZW4yIDw8IGVuZGw7CgoJcmV0dXJuIDA7Cn0=