#include<iostream>
#include<string>
#include<vector>

std::vector<std::string> StringToVector (const std::string s,
                                         const char token)
{
  std::vector<std::string> v;

  size_t posLast = 0, pos = 0;
  while((pos = s.find(token, pos)) != std::string::npos)
  {
    if(s[pos] != s[posLast])
      v.push_back(s.substr(posLast, pos - posLast));
    posLast = ++pos;
  }
  if(s[posLast] != 0)  // If there is no terminating token found
    v.push_back(s.substr(posLast));

  return v;
}

int main (int argc, char** argv)
{
  std::cout << "\n\"\":\n";
  for(auto& i : StringToVector("", ','))
    std::cout << i << std::endl;

  std::cout << "\n\"a,b,c,d,\":\n";
  for(auto& i : StringToVector("a,b,c,d,", ','))
    std::cout << i << std::endl;

  std::cout << "\n\"a,,,\":\n";
  for(auto& i : StringToVector("a,,,", ','))
    std::cout << i << std::endl;

  std::cout << "\n\",,a,\":\n";
  for(auto& i : StringToVector(",,a,", ','))
    std::cout << i << std::endl;

  std::cout << "\n\",,,,\":\n";
  for(auto& i : StringToVector(",,,,", ','))
    std::cout << i << std::endl;

  std::cout << "\n\"a\":\n";
  for(auto& i : StringToVector("a", ','))
    std::cout << i << std::endl;

  std::cout << "\n\",,a\":\n";
  for(auto& i : StringToVector(",,a", ','))
    std::cout << i << std::endl;

  std::cout << "\n\"a,b,c,d\":\n";
  for(auto& i : StringToVector("a,b,c,d", ','))
    std::cout << i << std::endl;
  return 0;
}
