- #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=