用boost::tokenizer分割字符串

boost::tokenizer是一个用于高效字符串分割的工具,支持多种分隔符和特殊情况处理,如CSV格式解析、按偏移量分割等。通过TokenizerFunc、Iterator和Type参数灵活配置,可以实现对输入字符串的定制化分解。它提供了保留或抛弃分隔符的选项,并在遇到连续分隔符时可以选择输出空白单词或跳过。
摘要由CSDN通过智能技术生成
说明:本文是boost::tokenizer类的整理,原文出处为boost的document,此处仅作学习笔记之用。
1、boost::tokenizer
boost::tokenizer提供了一种灵活、易用的方式来将一个字符串分解为一个字符串列表。这是个模板类,类的声明为:
template <
        class TokenizerFunc = char_delimiters_separator<char>, 
        class Iterator = std::string::const_iterator,
        class Type = std::string
  >
  class tokenizer

它的核心包括,
  • TokenizerFunc:决定了字符串分割方式
  • Iterator:确定分割后的字符串的迭代类型
  • Type:需要分割的字符串类型
boost::tokenizer的构造函数有以下两个:
tokenizer(Iterator first, Iterator last,const TokenizerFunc& f = TokenizerFunc()) 
template<class Container>
tokenizer(const Container& c,const TokenizerFunc& f = TokenizerFunc())

其中参数的意义如下:
  
  
  

参数

描述

c 一个包含被分解的序列的容器。注:c.begin() 和 c.end() 必须可以转换为模板参数 Iterator.
f 一个符合 TokenizerFunction 的函数对象,用于对序列进行分解。
first 迭代器,表示被分解序列的开始位置。
last 迭代器,表示被分解序列的末尾位置。
tokenizer的使用很简单,以下示例为使用默认参数进行分割字符串,
 
 
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>

int main(){
   using namespace std;
   using namespace boost;
   string s = "This is,  a test";
   tokenizer<> tok(s);
   //tokenizer通过迭代器来访问分割后的字符序列,字符分割是在遍历过程中进行的,而不是构造函数
   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
   }
}

 tokenizer中使用的TokenFunc在boost标准中有其他3个实现,它们分别有不同的分割规则: 
  • char_seperator :根据分隔符进行分割,可以包含多个分割字符
  • escaped_list_seperator:用于对csv文件进行分割
  • offset_seperator:根据偏移量进行分割

2、boost::char_seperator

char_separator 类基于字符分隔符来分解一个字符序列,就象 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值