博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Boost】boost::string_algo详解2——find相关函数
阅读量:6849 次
发布时间:2019-06-26

本文共 3670 字,大约阅读时间需要 12 分钟。

来自: https://blog.csdn.net/huang_xw/article/details/8276123 

 

函数声明:

  1.  
    template<typename Range1T, typename Range2T>
  2.  
    iterator_range find_first(Range1T & Input, const Range2T & Search);
  3.  
    template<typename Range1T, typename Range2T>
  4.  
    iterator_range find_last(Range1T & Input, const Range2T & Search);
  5.  
    template<typename Range1T, typename Range2T>
  6.  
    iterator_range find_nth(Range1T &Input, const Range2T & Search, int Nth);
  7.  
    template<typename RangeT>
  8.  
    find_head(RangeT &Input,
    int N);
  9.  
    template<typename RangeT>
  10.  
    find_tail(RangeT & Input,
    int N);

例子:

  1.  
    // find_first:【1】查找字符串在输入中第一次出现的位置。
  2.  
    // find_last: 【2】查找字符串在输入中最后一次出现的位置。
  3.  
    // find_nth: 【3】查找字符串在输入中的第n次(从0开始计数)出现的位置。
  4.  
    // find_head: 【4】取一个字符串开头N个字符的字串,相当于substr(0,n);
  5.  
    // find_tail: 【5】取一个字符串末尾N个字符的字串。
  6.  
    void test_string_find_string()
  7.  
    {
  8.  
    std::string str1("a1234_first_nth_first_nth_");
  9.  
    boost::iterator_range<
    std::string::iterator> ir;
  10.  
     
  11.  
    // find_first与ifind_first(不区分大小写,其它同find_first)
  12.  
    ir = boost::find_first(str1,
    "first");
  13.  
    // 1. 通过iterator_range构建字符串
  14.  
    assert(
    std::string(ir.begin(), ir.end()) == "first");
  15.  
    // 2. 查看搜索到的字符串所在位置
  16.  
    assert(ir.begin() - str1.begin() ==
    6 && ir.end() - str1.begin() == 6 + 5);
  17.  
    // 3. 利用iterator_range处理搜索到的字符串
  18.  
    boost::to_upper(ir);
  19.  
    assert(str1 ==
    "a1234_FIRST_nth_first_nth_");
  20.  
    boost::to_lower(ir);
  21.  
    assert(str1 ==
    "a1234_first_nth_first_nth_");
  22.  
     
  23.  
    // find没有找到的情况
  24.  
    ir = boost::find_first(str1,
    "no");
  25.  
    assert(ir.empty());
    // 不存在
  26.  
    assert(
    std::string(ir.begin(), ir.end()).empty()); // 不存在,仍可构建一个string
  27.  
    std::ostringstream osstr;
  28.  
    osstr << boost::find_first(str1,
    "_first_");
  29.  
    assert(osstr.str() ==
    "_first_");
  30.  
    }

find_token的函数声明

  1.  
    template<typename RangeT, typename PredicateT>
  2.  
    iterator_range<
    typename range_iterator< RangeT >::type >
  3.  
    find_token(RangeT & Input, PredicateT Pred,
  4.  
    token_compress_mode_type eCompress = token_compress_off);

find_token的例子

  1.  
    void test_string_find_token()
  2.  
    {
  3.  
    using namespace boost;
  4.  
     
  5.  
    std::string str1("ab1234_first_nth_first_nth_");
  6.  
    iterator_range<
    std::string::iterator> ir;
  7.  
     
  8.  
    ir = find_token(str1, is_any_of(
    "irfst"));
  9.  
    assert(
    std::string(ir.begin(), ir.end()) == "f");
  10.  
     
  11.  
    ir = find_token(str1, is_any_of(
    "xfirts"), token_compress_off);
  12.  
    assert(
    std::string(ir.begin(), ir.end()) == "f");
  13.  
     
  14.  
    ir = find_token(str1, is_any_of(
    "irfst"), token_compress_on);
  15.  
    assert(
    std::string(ir.begin(), ir.end()) == "first");
  16.  
     
  17.  
    ir = find_token(str1, is_any_of(
    "fitr "), token_compress_on);
  18.  
    assert(
    std::string(ir.begin(), ir.end()) == "fir");
  19.  
     
  20.  
    ir = find_token(str1, is_lower(), token_compress_on);
  21.  
    assert(
    std::string(ir.begin(), ir.end()) == "ab");
  22.  
    }

find_regex的例子

    1.  
      // 注意加上头文件
    2.  
      // #include <boost/algorithm/string/regex.hpp>
    3.  
      // find_regex, find_all_regex
    4.  
      void test_string_find_regex()
    5.  
      {
    6.  
      using namespace boost;
    7.  
       
    8.  
      std::string str1("ab1234_first_nth_first_nth_");
    9.  
      iterator_range<
      std::string::iterator> ir;
    10.  
      regex rx("b[0-9]+_");
    11.  
       
    12.  
      ir = find_regex(str1, rx);
    13.  
      assert(
      std::string(ir.begin(), ir.end()) == "b1234_");
    14.  
       
    15.  
      std::string str2("b1_b22_b333_b4444");
    16.  
      std::vector<std::string> tokens;
    17.  
      find_all_regex(tokens, str2, rx);
    18.  
      assert(tokens.size() ==
      3);
    19.  
      assert(tokens[
      0] == "b1_");
    20.  
      assert(tokens[
      1] == "b22_");
    21.  
      assert(tokens[
      2] == "b333_");
    22.  
       
    23.  
      // 网络上找到的另一个例子
    24.  
      std::string value = "123a1cxxxxa56c";
    25.  
      regex pattern("a[0-9]+c");
    26.  
      iterator_range<
      std::string::iterator> find_result;
    27.  
      find_result = algorithm::find_regex(value, pattern);
    28.  
      assert(!find_result.empty());
    29.  
       
    30.  
      std::vector<std::string> results;
    31.  
      find_all_regex(results, value, pattern);
    32.  
      assert(
      "a1c" == results[0]);
    33.  
      assert(
      "a56c" == results[1]);
    34.  
      assert(!results.empty());
    35.  
       
    36.  
      value =
      "10.10.10.10 1.1.1.1";
    37.  
      boost::
      regex ip_pattern("(\\d{1, 3}.){3}\\d{1, 3}");
    38.  
      find_all_regex(results, value, ip_pattern);
    39.  
      assert(
      "10.10.10.10" == results[0]);
    40.  
      assert(
      "1.1.1.1" == results[1]);
    41.  
      assert(!results.empty());
    42.  
你可能感兴趣的文章
谷歌将推HTML5开发工具Google Web Designer
查看>>
[Hadoop] MapReduce架构设计
查看>>
【讨论帖】控制分布式缓存“及时”过期的一种实现
查看>>
队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)...
查看>>
Spring整合的quartz任务调度的实现方式
查看>>
[破解]java打包Exe工具 - Jar2Exe Wizard
查看>>
Tomcat
查看>>
try catch 怎么写?
查看>>
iOS学习笔记(十五)——数据库操作(SQLite)
查看>>
Android spinner 样式及其使用详解
查看>>
ftps加密服务器
查看>>
[置顶] 批处理命令
查看>>
谈谈不换行空格
查看>>
ubuntu 13.04 nginx.conf 配置详解
查看>>
Android调用系统的打电话和发短信界面(1.将消息内容带过去2.实现群发)
查看>>
如何在内网安装compass
查看>>
HDU 4705 Y (2013多校10,1010题,简单树形DP)
查看>>
[转]nginx下的url rewrite
查看>>
TF-IDF理解及其Java实现
查看>>
[c++]printf的编译器静态检测
查看>>