我一直在寻找boost :: tokenizer,并且我发现文档非常薄。是否有可能将它标记为“海豚 - 猴子 - 狒狒”之类的字符串,并且让每个单词都成为一个标记,以及每个双重短划线都是一个标记?从例子中我只看到了单字符分隔符被允许。图书馆不够先进,不适合更复杂的分隔符?使用boost :: tokenizer与字符串分隔符
回答
看起来你需要编写你自己的TokenizerFunction来做你想做的事情。
我明白了。我希望能有一些预先制作的东西,但我想我太希望了。 – Martin 2009-08-09 21:01:26
一个选项是尝试boost :: regex。不知道与自定义标记器相比的性能。
std::string s = "dolphin--monkey--baboon";
boost::regex re("[a-z|A-Z]+|--");
boost::sregex_token_iterator iter(s.begin(), s.end() , re, 0);
boost::sregex_token_iterator end_iter;
while(iter != end_iter)
{
std::cout << *iter << '\n';
++iter;
}
这很好。如果它有效,它会得到我的投票。 :) – 2012-10-11 21:10:44
使用iter_split允许您使用多个字符标记。下面 的代码将产生如下:
海豚
周一键
狒狒
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/iter_find.hpp>
// code starts here
std::string s = "dolphin--mon-key--baboon";
std::list<std::string> stringList;
boost::iter_split(stringList, s, boost::first_finder("--"));
BOOST_FOREACH(std::string token, stringList)
{
std::cout << token << '\n'; ;
}
这有创建整个字符串的副本的缺点。如果被标记的字符串很大,这是一个问题。 boost标记器不会这样做。 – 2012-10-11 21:09:52
我知道主题是很老,但在谷歌上的链接显示时我搜索“的字符串提高标记生成器”
,所以我会加入我的TokenizerFunction的变种,以防万一:
class FindStrTFunc
{
public:
FindStrTFunc() : m_str(g_dataSeparator)
{
}
bool operator()(std::string::const_iterator& next,
const std::string::const_iterator& end, std::string& tok) const
{
if (next == end)
{
return false;
}
const std::string::const_iterator foundToken =
std::search(next, end, m_str.begin(), m_str.end());
tok.assign(next, foundToken);
next = (foundToken == end) ? end : foundToken + m_str.size();
return true;
}
void reset()
{
}
private:
std::string m_str;
};
后,我们可以创建
boost::tokenizer<FindStrTFunc> tok("some input...some other input");
和使用,与通常的升压标记生成器
执行不理想(可能有错误),它只是一个例子 – Alek86 2012-01-09 00:23:01
- 1. Java Tokenizer,分隔字符串
- 2. Tokenizer不分隔字符串? (JAVA)
- 3. 分隔字符串与分隔符
- 4. regex as tokenizer - 以分隔符开头的字符串
- 5. Boost :: Split使用整个字符串作为分隔符
- 6. 直到在boost :: asio :: streambuf中使用字符串分隔符
- 7. 用“||”分隔字符串分隔符
- 8. 用分隔符分隔字符串
- 9. c#拆分字符串与一些分隔符和分隔符
- 10. 使用分隔符与转义的分隔符分割字符串
- 11. 如何使用字符串分隔符分割字符串?
- 12. 使用字符串作为分隔符来拆分字符串
- 13. 如何使用字符串分隔符分割字符串?
- 14. 字符串中的字符串Tokenizer
- 15. 分割使用boost ::字符串分割
- 16. 使用C的字符串分隔符
- 17. 分隔带分隔符的字符串
- 18. 将数字与由$符号分隔的字符串分隔吗?
- 19. 分隔符分隔字符串RadTreeView VB.NET
- 20. 字符串分隔符
- 21. 如何分割字符串并使用boost :: split保持分隔符?
- 22. 如何使用多个分隔符分隔字符串并保留分隔符?
- 23. 分隔字符串
- 24. 如何使用分隔字符串分割字符串“#|#”
- 25. 分割字符串使用多字符分隔符
- 26. 用分隔符分析字符串“;” (JAVA)
- 27. 用unicode分隔符分割字符串?
- 28. 分隔字符串?
- 29. python3字符串分隔符
- 30. VBA字符串分隔符
只是好奇,为什么这标志着社会维基? – 2009-08-09 20:57:20
我认为这会让其他人澄清我的问题,以防有点漫不经心。也许我应该读一下它是什么,直到下一次。 – Martin 2009-08-09 21:14:34