/*
* Author: ProgramCpp
*/
#include <iostream>
#include <string>
class CTokenize
{
std::string string, delimiters;
public:
CTokenize(std::string s, std::string delim) : string(s), delimiters (delim) {}
std::string GetNextToken()
{
// Skip delimiters at beginning.
std::string::size_type lastPos = string.find_first_not_of(delimiters, 0);
// Find first "non-delimiter".
std::string::size_type pos = string.find_first_of(delimiters, lastPos);
if (std::string::npos != pos || std::string::npos != lastPos)
{
std::string token = string.substr(lastPos, pos - lastPos);
string.erase (lastPos, pos - lastPos);
return token;
}
return "";
}
bool HaveMoreTokens()
{
return !string.empty();
}
};
int main(void) {
// your code goes here
std::string str("This - should also - tokenized");
std::string str2("demo string _ be _ and printed.");
CTokenize tokens(str, std::string("-"));
CTokenize tokens2(str2, std::string("_"));
/* walk through the tokens */
while( tokens.HaveMoreTokens() || tokens2.HaveMoreTokens())
{
if(tokens.HaveMoreTokens())
{
std::cout << tokens.GetNextToken() <<std::endl;
}
if(tokens2.HaveMoreTokens())
{
std::cout << tokens2.GetNextToken() <<std::endl;
}
}
return 0;
}
LyoKICogQXV0aG9yOiBQcm9ncmFtQ3BwCiAqLwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CgpjbGFzcyBDVG9rZW5pemUKewoJc3RkOjpzdHJpbmcgc3RyaW5nLCBkZWxpbWl0ZXJzOwoJcHVibGljOgoJQ1Rva2VuaXplKHN0ZDo6c3RyaW5nIHMsIHN0ZDo6c3RyaW5nIGRlbGltKSA6IHN0cmluZyhzKSwgZGVsaW1pdGVycyAoZGVsaW0pIHt9CgoJc3RkOjpzdHJpbmcgR2V0TmV4dFRva2VuKCkKCXsKIAkJLy8gU2tpcCBkZWxpbWl0ZXJzIGF0IGJlZ2lubmluZy4KCQkgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBsYXN0UG9zID0gc3RyaW5nLmZpbmRfZmlyc3Rfbm90X29mKGRlbGltaXRlcnMsIDApOwogICAgCS8vIEZpbmQgZmlyc3QgIm5vbi1kZWxpbWl0ZXIiLgogICAgCSBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHN0cmluZy5maW5kX2ZpcnN0X29mKGRlbGltaXRlcnMsIGxhc3RQb3MpOwoKICAgIAlpZiAoc3RkOjpzdHJpbmc6Om5wb3MgIT0gcG9zIHx8IHN0ZDo6c3RyaW5nOjpucG9zICE9IGxhc3RQb3MpCiAgICAJewoJCQlzdGQ6OnN0cmluZyB0b2tlbiA9IHN0cmluZy5zdWJzdHIobGFzdFBvcywgcG9zIC0gbGFzdFBvcyk7CgkJCXN0cmluZy5lcmFzZSAobGFzdFBvcywgcG9zIC0gbGFzdFBvcyk7CgkJCXJldHVybiB0b2tlbjsKCQl9CgkJIHJldHVybiAiIjsKCX0KCglib29sIEhhdmVNb3JlVG9rZW5zKCkKCXsKCQoJCXJldHVybiAhc3RyaW5nLmVtcHR5KCk7Cgl9Cgp9OwoKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoKICAgc3RkOjpzdHJpbmcgc3RyKCJUaGlzIC0gc2hvdWxkIGFsc28gLSB0b2tlbml6ZWQiKTsKICAgc3RkOjpzdHJpbmcgc3RyMigiZGVtbyBzdHJpbmcgXyBiZSBfIGFuZCBwcmludGVkLiIpOwoKICAgQ1Rva2VuaXplIHRva2VucyhzdHIsIHN0ZDo6c3RyaW5nKCItIikpOwogICBDVG9rZW5pemUgdG9rZW5zMihzdHIyLCBzdGQ6OnN0cmluZygiXyIpKTsKICAgCiAgIC8qIHdhbGsgdGhyb3VnaCB0aGUgdG9rZW5zICovCiAgIHdoaWxlKCB0b2tlbnMuSGF2ZU1vcmVUb2tlbnMoKSB8fCB0b2tlbnMyLkhhdmVNb3JlVG9rZW5zKCkpIAogICB7ICAgIAogICAgIAlpZih0b2tlbnMuSGF2ZU1vcmVUb2tlbnMoKSkKCQl7CgkJCXN0ZDo6Y291dCA8PCB0b2tlbnMuR2V0TmV4dFRva2VuKCkgPDxzdGQ6OmVuZGw7CgkJfQoKCSAJaWYodG9rZW5zMi5IYXZlTW9yZVRva2VucygpKQoJCXsKCQkgIAlzdGQ6OmNvdXQgPDwgdG9rZW5zMi5HZXROZXh0VG9rZW4oKSA8PHN0ZDo6ZW5kbDsKCQl9CiAgIH0KICAKICAgcmV0dXJuIDA7Cn0=