Added string tokenizer.

This commit is contained in:
vng 2013-08-07 22:16:28 +03:00
parent 01df49777f
commit f27fa7a6f3
2 changed files with 32 additions and 0 deletions

21
env/strings.hpp vendored
View file

@ -16,4 +16,25 @@ template <class T> string ToString(T const & t)
string MakeNormalizeAndLowerUtf8(string const & s);
template <class IterT>
IterT Tokenize(string const & s, char const * delims, IterT out)
{
size_t i = 0;
while (i < s.size())
{
size_t j = s.find_first_of(delims, i);
if (j == string::npos)
j = s.size();
if (j > i)
{
*out++ = s.substr(i, j-i);
i = j+1;
}
else
++i;
}
return out;
}
}

View file

@ -79,3 +79,14 @@ TEST(Env, MakeNormalizeAndLowerUtf8)
for (size_t i = 0; i < ArraySize(arr); ++i)
EXPECT_EQ(str::MakeNormalizeAndLowerUtf8(arr[i]), res[i]);
}
TEST(Env, Tokenizer)
{
string in = "\taaa, bbb?,\tccc ";
string out[] = { "aaa", "bbb", "ccc" };
vector<string> v;
str::Tokenize(in, " ,\t?", back_inserter(v));
EXPECT_TRUE(equal(out, out + ArraySize(out), v.begin()));
}