iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++BoostTokenizer使用详细讲解
  • 446
分享到

C++BoostTokenizer使用详细讲解

C++BoostTokenizerC++BoostTokenizer功能与使用 2022-11-16 00:11:03 446人浏览 泡泡鱼
摘要

目录介绍示例一示例二示例三示例四示例五示例六示例七介绍 库 Boost.Tokenizer 允许您通过将某些字符解释为分隔符来迭代字符串中的部分表达式。使用 boost::token

介绍

库 Boost.Tokenizer 允许您通过将某些字符解释为分隔符来迭代字符串中的部分表达式。使用 boost::tokenizer 迭代字符串中的部分表达式

示例一

使用 boost::tokenizer 迭代字符串中的部分表达式

#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 中定义了一个名为 boost::tokenizer 的类模板。它期望一个标识连贯表达式的类作为模板参数。示例 10.1 使用了 boost::char_separator 类,它将空格和标点符号解释为分隔符。

必须使用 std::string 类型的字符串初始化标记器。使用成员函数 begin() 和 end(),可以像容器一样访问标记器。用于初始化标记器的字符串的部分表达式可通过迭代器获得。部分表达式的计算方式取决于作为模板参数传递的类的类型。

因为 boost::char_separator 默认将空格和标点符号解释为分隔符,所以示例 10.1 会显示 Boost、C、+、+ 和库。 boost::char_separator 使用 std::isspace() 和 std::ispunct() 来识别分隔符。 Boost.Tokenizer 区分应该显示的分隔符和应该抑制的分隔符。默认情况下,空格被抑制并显示标点符号。

示例二

初始化 boost::char_separator 以适应迭代

#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';
}

为了防止标点符号被解释为分隔符,请在将 boost::char_separator 对象传递给分词器之前对其进行初始化。

boost::char_separator 的构造函数一共接受三个参数,但只需要第一个。第一个参数描述被抑制的各个分隔符。示例 10.2 与示例 10.1 一样,将空格视为分隔符。

第二个参数指定应显示的分隔符。如果省略此参数,则不显示分隔符,程序现在将显示 Boost、C++ 和库。

示例三

使用 boost::char_separator 模拟默认行为

#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';
}

如果将加号作为第二个参数传递,则示例 10.3 的行为类似于示例 10.1。

第三个参数决定是否显示空的部分表达式。如果连续找到两个分隔符,则对应的部分表达式为空。默认情况下,不显示这些空表达式。使用第三个参数,可以更改默认行为。

示例四

初始化 boost::char_separator 以显示空的部分表达式

#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 显示了两个额外的空部分表达式。第一个位于两个加号之间,而第二个位于第二个加号和后面的空格之间。

示例五

具有宽字符串的 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 迭代一个 std::wstring 类型的字符串。为了支持此字符串类型,必须使用附加模板参数初始化标记器。类 boost::char_separator 也必须用 wchar_t 初始化。

除了 boost::char_separator 之外,Boost.Tokenizer 还提供了两个额外的类来识别部分表达式。

示例六

使用 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 用于读取以逗号分隔的多个值。这种格式通常称为 CSV(逗号分隔值)。 boost::escaped_list_separator 还处理双引号和转义序列。因此,示例 10.6 的输出是 Boost 和 C++ 库。

提供的第二个类是 boost::offset_separator,它必须被实例化。相应的对象必须作为第二个参数传递给 boost::tokenizer 的构造函数。

示例七

使用 boost::offset_separator 迭代部分表达式

#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 指定字符串中各个部分表达式结束的位置。示例 10.7 指定第一个部分表达式在 5 个字符后结束,第二个在另外 5 个字符后结束,第三个在以下 9 个字符后结束。输出将是 Boost、_C++_ 和库。

到此这篇关于C++ Boost Tokenizer使用详细讲解的文章就介绍到这了,更多相关C++ Boost Tokenizer内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++BoostTokenizer使用详细讲解

本文链接: https://www.lsjlt.com/news/172989.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++BoostTokenizer使用详细讲解
    目录介绍示例一示例二示例三示例四示例五示例六示例七介绍 库 Boost.Tokenizer 允许您通过将某些字符解释为分隔符来迭代字符串中的部分表达式。使用 boost::token...
    99+
    2022-11-16
    C++ Boost Tokenizer C++ Boost Tokenizer功能与使用
  • C++BoostAtomic详细讲解
    目录一、说明二、示例和代码一、说明 Boost.Atomic 提供类 boost::atomic,可用于创建原子变量。它们被称为原子变量,因为所有访问都是原子的。 Boost.Ato...
    99+
    2022-11-21
    C++ Boost Atomic C++ Atomic
  • C++超详细讲解友元的使用
    目录一、友元的概念二、友元的用法三、友元的语法四、友元的尴尬五、注意事项六、小结一、友元的概念 什么是友元友元是 C++ 中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系...
    99+
    2024-04-02
  • C++BoostLockfree超详细讲解使用方法
    目录一、说明二、示例和代码Boost.Lockfree 一、说明 Boost.Lockfree 提供线程安全和无锁容器。可以从多个线程访问此库中的容器,而无需同步访问。 在 1.56...
    99+
    2022-11-21
    C++ Boost Lockfree C++ Lockfree方案
  • C++超详细讲解模板的使用
    目录一、函数模板1.1函数模板概念1.2 函数模板格式1.3 函数模板的原理1.4 函数模板的实例化二、类模板2.1 类模板的定义格式2.2类模板的实例化总结一、函数模板 1.1函数...
    99+
    2024-04-02
  • C++ 超详细讲解stack与queue的使用
    目录stack介绍和使用模拟实现stack的使用例题最小栈栈的弹出压入序列逆波兰表达式求值queue模拟实现容器适配器deque简介priority_queue优先级队列priori...
    99+
    2024-04-02
  • C++stack与queue使用方法详细讲解
    目录Stack的介绍和使用stack的默认定义的模板stack的使用queue的介绍和使用queue的默认定义的模板queue的使用Stack的介绍和使用 stack的文档介绍 st...
    99+
    2023-01-04
    C++ stack与queue C++ stack使用方法 C++ queue使用方法
  • C++ 超详细示例讲解list的使用
    目录一、list的介绍list的介绍二、list的使用2.1 list的构造函数2.2 list迭代器的使用2.3 list相关的容量大小相关的函数2.4 list数据的访问相关的函...
    99+
    2024-04-02
  • C++超详细讲解auto与nullptr的使用
    目录一. auto关键字1. auto介绍2. 使用规则3. auto不能推导的场景二. 基于范围的for循环(C++11)1. 范围for的语法2. 范围for的使用条件三. 指针...
    99+
    2024-04-02
  • C++ Boost Lockfree超详细讲解使用方法
    Boost Lockfree 是一个基于 C++ 的库,用于实现无锁的数据结构和算法。无锁的数据结构和算法是为了解决并发编程中的竞争...
    99+
    2023-08-16
    C++
  • C++BoostUuid超详细讲解
    目录一、说明二、Boost.Uuid库示例和代码一、说明 Boost.Uuid 为 UUID 提供生成器。 UUID 是不依赖于中央协调实例的通用唯一标识符。例如,没有数据库存储所有...
    99+
    2022-12-08
    C++ Boost Uuid C++ Uuid标识符
  • C++BoostUtility超详细讲解
    目录一、说明二、Boost.Utility库示例和代码一、说明 Boost.Utility 库是杂项、有用的类和函数的集合,它们太小而无法在独立库中维护。虽然实用程序很小并且可以快速...
    99+
    2022-12-08
    C++ Boost Utility C++ Utility库
  • C++详细讲解引用类型
    目录一、C++中的引用类型二、如何使用C++中的引用类型一、C++中的引用类型 在以严蔚敏老师的《数据结构》为代表的诸多数据结构的书中,都出现了C++引用这一用法,所以在学习数据结构...
    99+
    2024-04-02
  • C语言详细讲解qsort函数的使用
    目录qsort1.int型2.float型3.struct型qsort 功能:Performs a quick sort.(快速排序)参数:void qsort( void *bas...
    99+
    2024-04-02
  • C语言超详细讲解指针的使用
    目录指针概述自身类型指向类型代码例子数值型指针字符型指针单字符字符数组字符串型指针字符数组总结指针概述 C语言中指针也可以认为是一种类型,不同于数值型和字符型的类型。推演过去指针变量...
    99+
    2024-04-02
  • C语言 详细讲解#pragma的使用方法
    #pragma是C语言中的预处理指令,用于告诉编译器在编译过程中采取特定的行为。以下是#pragma的使用方法的详细讲解:1. #p...
    99+
    2023-08-08
    C语言
  • C语言详细讲解#pragma的使用方法
    目录一、#pragma 简介二、#pragma message三、#pragma once四、#pragma pack五、小结一、#pragma 简介 #pragma 用于指示编译器...
    99+
    2024-04-02
  • C++BoostBimap示例详细讲解
    目录一、提要二、示例练习一、提要 库 Boost.Bimap 基于 Boost.MultiIndex 并提供了一个无需先定义即可立即使用的容器。该容器类似于 std::map,但支持...
    99+
    2022-11-13
    C++ Boost Bimap C++ Bimap库
  • C++BoostMPI接口详细讲解
    目录一、说明二、开发和运行时环境三、简单数据交换一、说明 Boost.MPI 提供了 MPI 标准(消息传递接口)的接口。该标准简化了并发执行任务的程序的开发。您可以使用线程或通过共...
    99+
    2022-11-21
    C++ Boost MPI C++ MPI接口
  • C# 多线程详细讲解
    多线程是指在一个程序中同时执行多个线程,每个线程可以独立执行不同的任务。在 C# 中,可以使用 System.Threading 命...
    99+
    2023-09-09
    C#
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作