#ifndef STRING_TOKENIZER_H
#define STRING_TOKENIZER_H
#include <string>
class StringTokenizer{
std::string s;
std::string d;
size_t pos;
void SkipToNextNonDelimiter(){
while(pos < s.size()){
if(d.find(s[pos]) != std::string::npos){ // if is a delimiter
pos++;
}else{
break;
}
}
}
public:
StringTokenizer(const std::string &str, const char *delimiters = " \t\n\r"):
s(str),
d(delimiters),
pos(0)
{
SkipToNextNonDelimiter();
}
~StringTokenizer(){}
bool hasNext() const{
return pos < s.size();
}
void next(std::string &str){
int newpos = pos+1;
while(newpos < s.size()){
if(d.find(s[newpos]) == std::string::npos){ // if NOT a delimiter
newpos++;
}else{
break;
}
}
str = s.substr(pos, newpos-pos);
pos = newpos;
SkipToNextNonDelimiter();
//std::cout << pos << std::endl;
}
};
#endif