boost tokenizer 字串按格式分解

2022-09-21 16:30:08 字數 2615 閱讀 9456

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

char_separator有兩個建構函式

1. char_separator()

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

2. char_separator(// 不保留的分隔符

const char* dropped_delims,

// 保留的分隔符

const char* kept_delims = 0, 

// 預設不保留空格分隔符, 反之加上改引數keep_empty_tokens

empty_token_policy empty_tokens = drop_empty_tokens) 

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

escaped_list_separator有兩個建構函式

下面三個字元做為分隔符: '\', ',', '"'

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

描述ec

指定用作字段分隔的字元

q指定用作引號的字元

2. escaped_list_separator(string_type e, string_type c, string_type q):

描述

e字串e中的字元都被視為轉義字元。如果給定的是空字串,則沒有轉義字元。

c字串c中的字元都被視為分隔符。如果給定的是空字串,則沒有分隔符。

q字串q中的字元都被視為引號字元。如果給定的是空字串,則沒有引號字元。

offset_separator 有乙個有用的建構函式

template

offset_separator(iter begin,iter end,bool bwrapoffsets = true, bool breturnpartiallast = true);

描述

begin, end

指定整數偏移量序列

bwrapoffsets

指明當所有偏移量用完後是否迴繞到偏移量序列的開頭繼續。

例如字串 "1225200101012002" 用偏移量 (2,2,4) 分解,

如果 bwrapoffsets 為 true, 則分解為 12 25 2001 01 01 2002.

如果 bwrapoffsets 為 false, 則分解為 12 25 2001,然後就由於偏移量用完而結束。

breturnpartiallast

指明當被分解序列在生成當前偏移量所需的字元數之前結束,是否建立乙個單詞,或是忽略它。

例如字串 "122501" 用偏移量 (2,2,4) 分解,

如果 breturnpartiallast 為 true,則分解為 12 25 01.

如果為 false, 則分解為 12 25,然後就由於序列中只剩下2個字元不足4個而結束。

void test_string_tokenizer()  

// 2. char_separator()

// 3. char_separator(const char* dropped_delims,

// const char* kept_delims = 0,

// empty_token_policy empty_tokens = drop_empty_tokens)

// 4. escaped_list_separator

// 5. offset_separator

; offset_separator f(offsets, offsets + 3);

tokenizertok(str, f);

for (boost_auto(pos, tok.begin()); pos != tok.end(); ++pos)

std::cout << "[" << *pos << "]";

std::cout << std::endl;

} }

用boost tokenizer分割字串

說明 本文是boost tokenizer類的整理,原文出處為boost的document,此處僅作學習筆記之用。1 boost tokenizer boost tokenizer提供了一種靈活 易用的方式來將乙個字串分解為乙個字串列表。這是個模板類,類的宣告為 template class tok...

Python檢測重複字 部分中華字經重複字檢測

中文去標點符號,中文繁體字轉化簡體字,列表檢測並輸出重複項,list當多個相同值時索引 關於去標點,使用包 zhon,直接pip即可 安裝及使用 關於中文繁簡轉換,安裝opencc python 安裝及使用 coding utf 8 author zhr date 2019 10 25 20 26 ...

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...