使用boost/tokenizer对字符串解析拆分

我的文章追求简单实用,旨在知识共享。

介绍对象:boost/tokenizer

用处:你要处理的字符串很长,又要从中取很多的值的时候,用这玩意儿太省事了。当然,其他情况只要你想去“切”一个字符串,它就包准能派上用场。

处理过程,设计架构:

1. 通过指定的界定符把要处理的字符串“切成小段”,界定符是一个模板类,你要按什么“切”,它就变成什么刀;

2. 把切好的小段再装到一个容器里,这好像看起来是个普通的容器,操作跟别的都一样;

3. 接下来就该干嘛干嘛了。自己去容器里边找你要的信息,切好的小段字符串都按顺序放在里边了。


一个例子让你上手:

要字符串的字符串: "router=tteerc:tt :=dd link: {yathedfda} type=12\n"

我的“刀”: =:{}\n

切完后容器里的数据: router, tteerc, tt, dd, link, yathedfda, type, 12.

代码:

#include <iostream>
#include <boost/tokenizer.hpp>   //这就是tokenizer的头文件,包含它就能用啦!挺好记的!
using namespace std;
using namespace boost;

int main()
{
    string lines = "router=tteerc:tt :=dd link: {yathedfda} type=12\n";    //要处理的字符串
    const char* const dropped_delimiters = ":= \n,{}" ; // 这是定义以哪些字符来进行分割,遇上这些字符就来一刀
    char_separator<char> separator( dropped_delimiters) ; //我决定用上一行指定的字符来切,所以就用char_separator<char>,你可以想成这就是“字符刀”
    tokenizer< char_separator<char> > toker( lines, separator ) ; //开切,切完装toker里边

//下边开始就是对toker的历遍了,操作跟普通容器一样

    tokenizer_type::iterator beg = toker.begin();
    for(; beg != toker.end(); beg++)
    {
        std::cout<<*beg<<std::endl;
    }
    return 0;
}

程序结果输出:

router

tteerc

tt

dd

link

yathedfda

type

12

值都在容器里就好办了,比如我要取type的值12,那就找到type:if(*beg == "type") , 取12:*++beg


到此,相信你对这个工具有所了解了吧。


刚才说到“字符刀”,tokenizer又是个模板类,你一定会想到还有其他“刀”,还有其他方法来切字符串。不要急,我的下一篇文章——提高篇就告诉更多tokenizer的东西。


希望此文对你有帮助。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值