程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Boost::tokenizer詳解,boosttokenizer詳解

Boost::tokenizer詳解,boosttokenizer詳解

編輯:C++入門知識

Boost::tokenizer詳解,boosttokenizer詳解


  tokenizer 庫提供預定義好的四個分詞對象, 其中char_delimiters_separator已棄用. 其他如下:

1. char_separator

  char_separator有兩個構造函數

1 char_separator()

  使用函數 std::isspace() 來識別被棄分隔符,同時使用 std::ispunct() 來識別保留分隔符。另外,拋棄空白單詞。(見例2)

1 char_separator(// 不保留的分隔符
2                const Char* dropped_delims,
3                // 保留的分隔符
4                const Char* kept_delims = 0, 
5                // 默認不保留空格分隔符, 反之加上改參數keep_empty_tokens
6                empty_token_policy empty_tokens = drop_empty_tokens) 

  該函數創建一個 char_separator 對象,該對象被用於創建一個 token_iterator 或 tokenizer 以執行單詞分解。dropped_delimskept_delims 都是字符串,其中的每個字符被用作分解時的分隔符。當在輸入序列中遇到一個分隔符時,當前單詞即完成,並開始下一個新單詞。dropped_delims 中的分隔符不出現在輸出的單詞中,而 kept_delims 中的分隔符則會作為單詞輸出。如果 empty_tokens 為 drop_empty_tokens, 則空白單詞不會出現在輸出中。如果 empty_tokens 為 keep_empty_tokens 則空白單詞將出現在輸出中。 (見例3)

2. escaped_list_separator

  escaped_list_separator有兩個構造函數,下面三個字符做為分隔符:  '\' ,  ',' ,  '"'

1 explicit escaped_list_separator(Char e = '\\', Char c = ',',Char q = '\"'); 

 

1 escaped_list_separator(string_type e, string_type c, string_type q):

3. offset_separator

  offset_separator 有一個有用的構造函數

1 template<typename Iter>
2   offset_separator(Iter begin,Iter end,bool bwrapoffsets = true, bool breturnpartiallast = true);

 1 void test_string_tokenizer()
 2 {
 3     using namespace boost;
 4 
 5     // 1. 使用缺省模板參數創建分詞對象, 默認把所有的空格和標點作為分隔符. 
 6     {
 7         std::string str("Link raise the master-sword.");
 8 
 9         tokenizer<> tok(str);
10         for (BOOST_AUTO(pos, tok.begin()); pos != tok.end(); ++pos)
11             std::cout << "[" << *pos << "]";
12         std::cout << std::endl;
13         // [Link][raise][the][master][sword]
14     }
15 
16     // 2. char_separator()
17     {
18         std::string str("Link raise the master-sword.");
19 
20         // 一個char_separator對象, 默認構造函數(保留標點但將它看作分隔符)
21         char_separator<char> sep;
22         tokenizer<char_separator<char> > tok(str, sep);
23         for (BOOST_AUTO(pos, tok.begin()); pos != tok.end(); ++pos)
24             std::cout << "[" << *pos << "]";
25         std::cout << std::endl;
26         // [Link][raise][the][master][-][sword][.]
27     }
28 
29     // 3. char_separator(const Char* dropped_delims,
30     //                   const Char* kept_delims = 0, 
31     //                   empty_token_policy empty_tokens = drop_empty_tokens)
32     {
33         std::string str = ";!!;Hello|world||-foo--bar;yow;baz|";
34 
35         char_separator<char> sep1("-;|");
36         tokenizer<char_separator<char> > tok1(str, sep1);
37         for (BOOST_AUTO(pos, tok1.begin()); pos != tok1.end(); ++pos)
38             std::cout << "[" << *pos << "]";
39         std::cout << std::endl;
40         // [!!][Hello][world][foo][bar][yow][baz]
41 
42         char_separator<char> sep2("-;", "|", keep_empty_tokens);
43         tokenizer<char_separator<char> > tok2(str, sep2);
44         for (BOOST_AUTO(pos, tok2.begin()); pos != tok2.end(); ++pos)
45             std::cout << "[" << *pos << "]";
46         std::cout << std::endl;
47         // [][!!][Hello][|][world][|][][|][][foo][][bar][yow][baz][|][]
48     }
49 
50     // 4. escaped_list_separator
51     {
52         std::string str = "Field 1,\"putting quotes around fields, allows commas\",Field 3";
53 
54         tokenizer<escaped_list_separator<char> > tok(str);
55         for (BOOST_AUTO(pos, tok.begin()); pos != tok.end(); ++pos)
56             std::cout << "[" << *pos << "]";
57         std::cout << std::endl;
58         // [Field 1][putting quotes around fields, allows commas][Field 3]
59         // 引號內的逗號不可做為分隔符.
60     }
61 
62     // 5. offset_separator
63     {
64         std::string str = "12252001400";
65 
66         int offsets[] = { 2, 2, 4 };
67         offset_separator f(offsets, offsets + 3);
68         tokenizer<offset_separator> tok(str, f);
69 
70         for (BOOST_AUTO(pos, tok.begin()); pos != tok.end(); ++pos)
71             std::cout << "[" << *pos << "]";
72         std::cout << std::endl;
73         //    [12][25][2001][40][0]
74     }
75 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved