我一直在尋找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