#include <iostream>
#include <iterator>
#include <type_traits>
#include <tuple>
#include <vector>
#include <string>
#include <algorithm>
std::vector<std::string> tokenizeLine(const std::string str)
{
std::vector<std::string> tokens;
std::string::size_type start = 0;
std::string::size_type end = 0;
while (end != std::string::npos)
{
enum POSES // Deliminators
{
EQUALS,
OPEN,
CLOSE,
SPACE,
EOL,
RETURN,
TAB,
COMMENT,
POSES_SIZE
};
std::string::size_type pos[] =
{
str.find('=', start),
str.find('{', start),
str.find('}', start),
str.find(' ', start),
str.find('\n', start),
str.find('\r', start),
str.find('\t', start),
str.find('#', start)
};
end = *std::min_element(pos, &pos[POSES_SIZE]);
switch (str[start])
{
case('=') :
tokens.push_back("=");
break;
case('{') :
tokens.push_back("{");
break;
case('}') :
tokens.push_back("}");
break;
case(' ') :
case('\n') :
case('\r') :
case('\t'):
break;
case('#') :
return tokens;
break;
default:
if (str.substr(start, end - start).length() > 0)
{
tokens.push_back(str.substr(start, end - start));
--end;
}
}
// If at end, use start=maxSize. Else use start=end+delimiter.
start = ((end > (std::string::npos - sizeof(char)))
? std::string::npos : end + sizeof(char));
}
return tokens;
}
int main()
{
auto ans = tokenizeLine("show_position = { x=-9 y =78 }");
std::ostream_iterator<std::string> o(std::cout, "\n");
std::copy(ans.begin(), ans.end(), o);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRva2VuaXplTGluZShjb25zdCBzdGQ6OnN0cmluZyBzdHIpCnsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0b2tlbnM7CgogICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzdGFydCA9IDA7CiAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCAgID0gMDsKICAgIHdoaWxlIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCiAgICB7CiAgICAgICAgZW51bSBQT1NFUyAvLyBEZWxpbWluYXRvcnMKICAgICAgICB7CiAgICAgICAgICAgIEVRVUFMUywKICAgICAgICAgICAgT1BFTiwKICAgICAgICAgICAgQ0xPU0UsCiAgICAgICAgICAgIFNQQUNFLAogICAgICAgICAgICBFT0wsCiAgICAgICAgICAgIFJFVFVSTiwKICAgICAgICAgICAgVEFCLAogICAgICAgICAgICBDT01NRU5ULAogICAgICAgICAgICBQT1NFU19TSVpFCiAgICAgICAgfTsKICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvc1tdID0KICAgICAgICB7CiAgICAgICAgICAgIHN0ci5maW5kKCc9Jywgc3RhcnQpLAogICAgICAgICAgICBzdHIuZmluZCgneycsIHN0YXJ0KSwKICAgICAgICAgICAgc3RyLmZpbmQoJ30nLCBzdGFydCksCiAgICAgICAgICAgIHN0ci5maW5kKCcgJywgc3RhcnQpLAogICAgICAgICAgICBzdHIuZmluZCgnXG4nLCBzdGFydCksCiAgICAgICAgICAgIHN0ci5maW5kKCdccicsIHN0YXJ0KSwKICAgICAgICAgICAgc3RyLmZpbmQoJ1x0Jywgc3RhcnQpLAogICAgICAgICAgICBzdHIuZmluZCgnIycsIHN0YXJ0KQogICAgICAgIH07CiAgICAgICAgZW5kID0gKnN0ZDo6bWluX2VsZW1lbnQocG9zLCAmcG9zW1BPU0VTX1NJWkVdKTsKCiAgICAgICAgc3dpdGNoIChzdHJbc3RhcnRdKQogICAgICAgIHsKICAgICAgICBjYXNlKCc9JykgOgogICAgICAgICAgICB0b2tlbnMucHVzaF9iYWNrKCI9Iik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UoJ3snKSA6CiAgICAgICAgICAgIHRva2Vucy5wdXNoX2JhY2soInsiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSgnfScpIDoKICAgICAgICAgICAgdG9rZW5zLnB1c2hfYmFjaygifSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlKCcgJykgOgogICAgICAgIGNhc2UoJ1xuJykgOgogICAgICAgIGNhc2UoJ1xyJykgOgogICAgICAgIGNhc2UoJ1x0Jyk6CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UoJyMnKSA6CiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CgkJCWlmIChzdHIuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCkubGVuZ3RoKCkgPiAwKQoJCQl7CgkJCQl0b2tlbnMucHVzaF9iYWNrKHN0ci5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KSk7CgkJCQktLWVuZDsKCQkJfQogICAgICAgIH0KCiAgICAgICAgLy8gSWYgYXQgZW5kLCB1c2Ugc3RhcnQ9bWF4U2l6ZS4gIEVsc2UgdXNlIHN0YXJ0PWVuZCtkZWxpbWl0ZXIuCiAgICAgICAgc3RhcnQgPSAoKGVuZCA+IChzdGQ6OnN0cmluZzo6bnBvcyAtIHNpemVvZihjaGFyKSkpCiAgICAgICAgICAgID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBlbmQgKyBzaXplb2YoY2hhcikpOwogICAgfQogICAgcmV0dXJuIHRva2VuczsKfQoKaW50IG1haW4oKQp7CglhdXRvIGFucyA9IHRva2VuaXplTGluZSgic2hvd19wb3NpdGlvbiA9IHsgeD0tOSB5ID03OCB9Iik7CglzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+IG8oc3RkOjpjb3V0LCAiXG4iKTsKCXN0ZDo6Y29weShhbnMuYmVnaW4oKSwgYW5zLmVuZCgpLCBvKTsKCXJldHVybiAwOwp9