欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ Boost Tokenizer使用詳細(xì)講解

 更新時(shí)間:2022年11月11日 16:09:26   作者:無水先生  
Boost是為C++語言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱

介紹

庫(kù) Boost.Tokenizer 允許您通過將某些字符解釋為分隔符來迭代字符串中的部分表達(dá)式。使用 boost::tokenizer 迭代字符串中的部分表達(dá)式

示例一

使用 boost::tokenizer 迭代字符串中的部分表達(dá)式

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
  std::string s = "Boost C++ Libraries";
  tokenizer tok{s};
  for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)
    std::cout << *it << '\n';
}

Boost.Tokenizer 在 boost/tokenizer.hpp 中定義了一個(gè)名為 boost::tokenizer 的類模板。它期望一個(gè)標(biāo)識(shí)連貫表達(dá)式的類作為模板參數(shù)。示例 10.1 使用了 boost::char_separator 類,它將空格和標(biāo)點(diǎn)符號(hào)解釋為分隔符。

必須使用 std::string 類型的字符串初始化標(biāo)記器。使用成員函數(shù) begin() 和 end(),可以像容器一樣訪問標(biāo)記器。用于初始化標(biāo)記器的字符串的部分表達(dá)式可通過迭代器獲得。部分表達(dá)式的計(jì)算方式取決于作為模板參數(shù)傳遞的類的類型。

因?yàn)?boost::char_separator 默認(rèn)將空格和標(biāo)點(diǎn)符號(hào)解釋為分隔符,所以示例 10.1 會(huì)顯示 Boost、C、+、+ 和庫(kù)。 boost::char_separator 使用 std::isspace() 和 std::ispunct() 來識(shí)別分隔符。 Boost.Tokenizer 區(qū)分應(yīng)該顯示的分隔符和應(yīng)該抑制的分隔符。默認(rèn)情況下,空格被抑制并顯示標(biāo)點(diǎn)符號(hào)。

示例二

初始化 boost::char_separator 以適應(yīng)迭代

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
  std::string s = "Boost C++ Libraries";
  boost::char_separator<char> sep{" "};
  tokenizer tok{s, sep};
  for (const auto &t : tok)
    std::cout << t << '\n';
}

為了防止標(biāo)點(diǎn)符號(hào)被解釋為分隔符,請(qǐng)?jiān)趯?boost::char_separator 對(duì)象傳遞給分詞器之前對(duì)其進(jìn)行初始化。

boost::char_separator 的構(gòu)造函數(shù)一共接受三個(gè)參數(shù),但只需要第一個(gè)。第一個(gè)參數(shù)描述被抑制的各個(gè)分隔符。示例 10.2 與示例 10.1 一樣,將空格視為分隔符。

第二個(gè)參數(shù)指定應(yīng)顯示的分隔符。如果省略此參數(shù),則不顯示分隔符,程序現(xiàn)在將顯示 Boost、C++ 和庫(kù)。

示例三

使用 boost::char_separator 模擬默認(rèn)行為

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
  std::string s = "Boost C++ Libraries";
  boost::char_separator<char> sep{" ", "+"};
  tokenizer tok{s, sep};
  for (const auto &t : tok)
    std::cout << t << '\n';
}

如果將加號(hào)作為第二個(gè)參數(shù)傳遞,則示例 10.3 的行為類似于示例 10.1。

第三個(gè)參數(shù)決定是否顯示空的部分表達(dá)式。如果連續(xù)找到兩個(gè)分隔符,則對(duì)應(yīng)的部分表達(dá)式為空。默認(rèn)情況下,不顯示這些空表達(dá)式。使用第三個(gè)參數(shù),可以更改默認(rèn)行為。

示例四

初始化 boost::char_separator 以顯示空的部分表達(dá)式

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
  std::string s = "Boost C++ Libraries";
  boost::char_separator<char> sep{" ", "+", boost::keep_empty_tokens};
  tokenizer tok{s, sep};
  for (const auto &t : tok)
    std::cout << t << '\n';
}

示例 10.4 顯示了兩個(gè)額外的空部分表達(dá)式。第一個(gè)位于兩個(gè)加號(hào)之間,而第二個(gè)位于第二個(gè)加號(hào)和后面的空格之間。

示例五

具有寬字符串的 Boost.Tokenizer

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::char_separator<wchar_t>,
    std::wstring::const_iterator, std::wstring> tokenizer;
  std::wstring s = L"Boost C++ Libraries";
  boost::char_separator<wchar_t> sep{L" "};
  tokenizer tok{s, sep};
  for (const auto &t : tok)
    std::wcout << t << '\n';
}

Example

示例 10.5 迭代一個(gè) std::wstring 類型的字符串。為了支持此字符串類型,必須使用附加模板參數(shù)初始化標(biāo)記器。類 boost::char_separator 也必須用 wchar_t 初始化。

除了 boost::char_separator 之外,Boost.Tokenizer 還提供了兩個(gè)額外的類來識(shí)別部分表達(dá)式。

示例六

使用 boost::escaped_list_separator 解析 CSV 文件

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::escaped_list_separator<char>> tokenizer;
  std::string s = "Boost,\"C++ Libraries\"";
  tokenizer tok{s};
  for (const auto &t : tok)
    std::cout << t << '\n';
}

boost::escaped_list_separator 用于讀取以逗號(hào)分隔的多個(gè)值。這種格式通常稱為 CSV(逗號(hào)分隔值)。 boost::escaped_list_separator 還處理雙引號(hào)和轉(zhuǎn)義序列。因此,示例 10.6 的輸出是 Boost 和 C++ 庫(kù)。

提供的第二個(gè)類是 boost::offset_separator,它必須被實(shí)例化。相應(yīng)的對(duì)象必須作為第二個(gè)參數(shù)傳遞給 boost::tokenizer 的構(gòu)造函數(shù)。

示例七

使用 boost::offset_separator 迭代部分表達(dá)式

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>
int main()
{
  typedef boost::tokenizer<boost::offset_separator> tokenizer;
  std::string s = "Boost_C++_Libraries";
  int offsets[] = {5, 5, 9};
  boost::offset_separator sep{offsets, offsets + 3};
  tokenizer tok{s, sep};
  for (const auto &t : tok)
    std::cout << t << '\n';
}

boost::offset_separator 指定字符串中各個(gè)部分表達(dá)式結(jié)束的位置。示例 10.7 指定第一個(gè)部分表達(dá)式在 5 個(gè)字符后結(jié)束,第二個(gè)在另外 5 個(gè)字符后結(jié)束,第三個(gè)在以下 9 個(gè)字符后結(jié)束。輸出將是 Boost、_C++_ 和庫(kù)。

到此這篇關(guān)于C++ Boost Tokenizer使用詳細(xì)講解的文章就介紹到這了,更多相關(guān)C++ Boost Tokenizer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的模板類&模板函數(shù)

    C++中的模板類&模板函數(shù)

    這篇文章主要介紹了C++中的模板類&模板函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • c++函數(shù)指針和回調(diào)函數(shù)示例

    c++函數(shù)指針和回調(diào)函數(shù)示例

    這篇文章主要介紹了c++函數(shù)指針和回調(diào)函數(shù)示例,需要的朋友可以參考下
    2014-05-05
  • 一文帶你學(xué)習(xí)C++中的派生機(jī)制

    一文帶你學(xué)習(xí)C++中的派生機(jī)制

    C++是一門面向?qū)ο蟮木幊陶Z言,其中的派生機(jī)制是其重要的面向?qū)ο筇匦灾?。本文我們就來詳?xì)地學(xué)習(xí)一下C++中的派生機(jī)制的相關(guān)知識(shí)吧
    2023-04-04
  • C++實(shí)現(xiàn)延遲的方法詳解

    C++實(shí)現(xiàn)延遲的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)延遲的三個(gè)方法,文中的示例代碼講解詳細(xì),對(duì)我們深入了解C++有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-12-12
  • C++封裝線程類的實(shí)現(xiàn)方法

    C++封裝線程類的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++封裝線程類的實(shí)現(xiàn)方法,實(shí)例介紹了針對(duì)線程的創(chuàng)建、調(diào)用等方法的封裝操作,需要的朋友可以參考下
    2014-10-10
  • Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問題詳解

    Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問題詳解

    遺傳算法起源于對(duì)生物系統(tǒng)所進(jìn)行的計(jì)算機(jī)模擬研究。其本質(zhì)是一種高效、并行、全局搜索的方法,能在搜索過程中自動(dòng)獲取和積累有關(guān)搜索空間的知識(shí),并自適應(yīng)地控制搜索過程以求得最佳解。本文將利用其求解非連續(xù)函數(shù)問題,需要的可以參考一下
    2022-09-09
  • C++繼承介紹

    C++繼承介紹

    C++繼承可以是單一繼承或多重繼承,每一個(gè)繼承連接可以是public,protected,private也可以是virtual或non-virtual
    2013-01-01
  • VC++實(shí)現(xiàn)選擇排序算法簡(jiǎn)單示例

    VC++實(shí)現(xiàn)選擇排序算法簡(jiǎn)單示例

    這篇文章主要介紹了VC++實(shí)現(xiàn)選擇排序算法簡(jiǎn)單示例,代碼簡(jiǎn)潔易懂,有助于讀者對(duì)數(shù)據(jù)結(jié)構(gòu)與算法的學(xué)習(xí),需要的朋友可以參考下
    2014-08-08
  • C語言直接插入排序算法介紹及示例

    C語言直接插入排序算法介紹及示例

    插入排序是把一個(gè)記錄插入到已排序的有序序列中,使整個(gè)序列在插入該記錄后仍然有序。插入排序中較簡(jiǎn)單的種方法是直接插入排序,其插入位置的確定方法是將待插入的記錄與有序區(qū)中的各記錄自右向左依次比較其關(guān)鍵字值的大小
    2022-08-08
  • C++中的struct和class的區(qū)別詳解

    C++中的struct和class的區(qū)別詳解

    這篇文章主要介紹了C++中的struct和class的區(qū)別詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08

最新評(píng)論