Hàm tokenizer bằng C++

Hàm sau đây nhận đầu vào là một xâu gồm các từ cách nhau bởi dấu cách và trả về một vector của các từ trong tiếng Anh.

Ví dụ: I am a student
=> Trả về vector gồm các từ: ‘I’, ‘am’, ‘a’, ‘student’.


vector<string> tokenizer(const string & str, const string & delimiters)
{

  vector<string>  tokens;

  // Skip delimiters at beginning.

  string::size_type lastPos = str.find_first_not_of(delimiters, 0);

  // Find first "non-delimiter".

  string::size_type pos = str.find_first_of(delimiters, lastPos);

  while (string::npos != pos || string::npos != lastPos)
  {
    // Found a token, add it to the vector.
    tokens.push_back(str.substr(lastPos, pos - lastPos));
    // Skip delimiters. Note the "not_of"
    lastPos = str.find_first_not_of(delimiters, pos);
   // Find next "non-delimiter"
   pos = str.find_first_of(delimiters, lastPos);
  }
  return tokens;
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: