头文件:

#include<iostream>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;

函数及使用:

大小写转换

1.  to_upper()      将字符串转为大写

    string str1(" hello world! ");
     to_upper(str1);    // str1 == " HELLO WORLD! "

2.  to_upper_copy()  将字符串大写并返回大写字符串

    string str1(" hello world! ");
     string str2;
     str2 = to_upper_copy(str1);  // str2 == " HELLO WORLD! "

3.  to_lower()     将字符串转为小写
       Example:参看to_upper()
4   to_lower_copy()   将字符串转为小写,并且赋值给另一个字符串
       Example:参看to_upper_copy()

Trimming(整理,去掉首尾的空格字符)

1.   trim_left()   将字符串开头的空格去掉
       string str1(" hello world! ");
       trim_left(str1);      // str1 == "hello world! "
 
2    trim_left_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉
       bool NotH(const char &ch)
       {
          if(ch == ' ' || ch == 'H' || ch == 'h')
             return true;
          else
             return false;
       }
       ....
       string str1(" hello world! ");
       trim_left_if(str1, NotH);      // str1 == "ello world! "
 
3     trim_left_copy() 将字符串开头的空格去掉,并且赋值给另一个字符串
         string str1(" hello world! ");
         string str2;
         str2 = trim_left_copy(str1); // str2 == "hello world! "
 
4     trim_left_copy_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉,并且赋值给另一个字符串
         string str1(" hello world! ");
         string str2;
         str2 = trim_left_copy_if(str1, NotH);      // str2 == "ello world! "
 
        // 将字符串结尾的空格去掉,示例请参看上面
5     trim_right_copy_if()
6     trim_right_if()
7     trim_right_copy()
8     trim_right()

     // 将字符串开头以及结尾的空格去掉,示例请参看上面
9     trim_copy_if()
10    trim_if()
11    trim_copy()
12      trim()

谓词
1 starts_with()  判断一个字符串是否是另外一个字符串的开始串

     string str1("hello world!");
     string str2("hello");
     bool result = starts_with(str1, str2); // result == true
 
2 istarts_with() 判断一个字符串是否是另外一个字符串的开始串(不区分大小写情况下)

     string str1("hello world!");
     string str2("Hello");
     bool result = istarts_with(str1, str2); // result == true

3 ends_with()    判断一个字符串是否是另外一个字符串的结尾串
4 iends_with()    判断一个字符串是否是另外一个字符串的结尾串(不区分大小写)

5 contains()     判断一个字符串是否包含另外一个字符串

     string str1("hello world!");
     string str2("llo");
     bool result = contains(str1, str2); // result == true
6 icontains()     判断一个字符串是否包含另外一个字符串(不区分大小写)

7 equals()       判断两个字符串是否相等
8 iequals()       判断两个字符串是否相等(不区分大小写)

9 lexicographical_compare()  按照字典排序,如果第一个字符串小于第二个字符串,返回true  (我的boost1.33没有实现?)
10 ilexicographical_compare() 按照字典排序,如果第一个字符串小于第二个字符串,返回true(不区分大小写)(我的boost1.33没有实现?

)

11 all() 判断字符串中的所有字符是否全部满足这个谓词
       bool is_123digit(const char &ch)
       {
         if(ch == '1' || ch == '2' || ch == '3')
             return true;
         else
             return false;
       }
        ...
       string str1("12332211");
       bool result = all(str1, is_123digit); // result == true
       str1 = "412332211";
       result = all(str1, is_123digit); // result == false

查找
1    find_first()    从头查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器
 Example:
 char ToUpper(char &ch)
 char ToUpper(char &ch)
 {
  if(ch <= 'z' && ch >= 'a')
   return ch + 'A'-'a';
  else
   return ch;
 }
 ...
 string str1("hello dolly!");
 iterator_range<string::iterator> result = find_first(str1,"ll");
 transform( result.begin(), result.end(), result.begin(), ToUpper ); // str1 == "heLLo dolly!"
2 ifind_first() 从头查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器(不区分大小写)

3 find_last() 从尾查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器
4 ifind_last() 从尾查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器(不区分大小写)

5 find_nth() 找到第n个匹配的子串(计算从0开始)
 Example:
 string str1("hello dolly!");
 iterator_range<string::iterator> result = find_nth(str1,"ll", 1);
 transform( result.begin(), result.end(), result.begin(), ToUpper ); // str1 == "hello doLLy!"
6 ifind_nth() 找到第n个匹配的子串(计算从0开始)(不区分大小写)

7 find_head() 找到字符串的前n个字节
 Example:
 string str1("hello dolly!");
 iterator_range<string::iterator> result = find_head(str1,5);
 transform( result.begin(), result.end(), result.begin(), ToUpper ); // str1 == "HELLO dolly!"
8 find_tail() 找到字符串的后n个字节

9 find_token() 找到符合谓词的串
 Example:
 char Add1(const char &ch)
 {
  return ch+1;
 }
 ...
 string str1("hello 1 world!");
 iterator_range<string::iterator> result = find_token(str1,is_123digit);
 transform( result.begin(), result.end(), result.begin(), Add1 ); // str1 == "hello 2 world!");

10 find_regex() 匹配正则表达式
 Example:(等稍候了解了boost的正则表达式后再给出)

11 find() 使用自己写的查找函数
 Example:
 iterator_range<string::iterator>
 MyFinder1( std::string::iterator begin, std::string::iterator end )
 {
  std::string::iterator itr;
  for(itr = begin;itr!=end;itr++)
  {
   if((*itr) == '1')
   {
    std::string::iterator preitr = itr;
    iterator_range<string::iterator> ret(preitr, ++itr);
    return ret;
   }
  }
  return iterator_range<string::iterator>();
 } // boost自己也提供了很多Finder
 ...
 string str1("hello 1 world!");
 iterator_range<string::iterator> result = find(str1,MyFinder1);
 transform( result.begin(), result.end(), result.begin(), Add1 ); // str1 == "hello 2 world!");

删除/替换
1 replace_first() 从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串
 Example:
 string str1("hello world!");
 replace_first(str1, "hello", "Hello"); // str1 = "Hello world!"
2 replace_first_copy()  从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串,并且赋

值给另一个字符串
 Example:
 string str1("hello world!");
 string str2;
 str2 = replace_first_copy(str1, "hello", "Hello"); // str2 = "Hello world!"   str1="hello world"
3 ireplace_first()  从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串(不区分大小写

)
4 ireplace_first_copy()  从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串,并且赋

值给另一个字符串(不区分大小写)
5 erase_first()   从头找到第一个匹配的字符串,将其删除
 Example:
 string str1("hello world!");
 erase_first(str1, "llo"); // str1 = "He world!"
6 erase_first_copy() 从头找到第一个匹配的字符串,将其删除,并且赋值给另一个字符串
 Example:
 string str1("hello world!");
 string str2;
 str2 = erase_first_copy(str1, "llo"); // str2 = "He world!"
7 ierase_first()  从头找到第一个匹配的字符串,将其删除(不区分大小写)
8 ierase_first_copy() 从头找到第一个匹配的字符串,将其删除,并且赋值给另一个字符串(不区分大

小写)

// 与上面类似,不过是从字符串尾开始替换
9 replace_last()
10 replace_last_copy()
11 ireplace_last()
12 ireplace_last_copy()
13 erase_last()
14 erase_last_copy()
15 ierase_last()
16 ierase_last_copy()

// 与上面类似,不过是从字符串n个匹配的开始替换
17 replace_nth()
 Example:
 string str1("hello world!");
 replace_nth(str1, "o", 1, "O"); // str1 = "hello wOrld!"
18 replace_nth_copy()
19 ireplace_nth()
20 ireplace_nth_copy()
21 erase_nth()
22 erase_nth_copy()
23 ierase_nth()
24 ierase_nth_copy()

// 与上面类似,不过是将所有的匹配字符串替换
25 replace_all()
26 replace_all_copy()
27 ireplace_all()
28 ireplace_all_copy()
29 erase_all()
30 erase_all_copy()
31 ierase_all()
32 ierase_all_copy()

33 replace_head() 替换前n个字符
 Example:
 string str1("hello world!");
 replace_head(str1, 5, "HELLO"); // str1 = "HELLO world!"

34 replace_head_copy() 替换前n个字符,并且赋值给另一个字符串
 Example:
  string str1("hello world!");
 string str2;
 str2 = replace_head_copy(str1, 5, "HELLO"); // str2 = "HELLO world!"

35 erase_head() 删除前n个字符
 Example:
 string str1("hello world!");
 erase_head(str1, 5); // str1 = " world!"

36 erase_head_copy()  删除前n个字符,并且赋值给另一个字符串
 Example:
  string str1("hello world!");
 string str2;
 str2 = erase_head_copy(str1, 5); // str2 = " world!"

// 与上面类似(替换/删除后n个字符)
37 replace_tail()
38 replace_tail_copy()
39 erase_tail()
40 erase_tail_copy()

// 与正则表示式相关,稍后了解。
41 replace_regex()
42 replace_regex_copy()
43 erase_regex()
44 erase_regex_copy()
45 replace_all_regex()
46 replace_all_regex_copy()
47 erase_all_regex()
48 erase_all_regex_copy()

// 不是很清楚,稍后了解
49 find_format()
50 find_format_copy()
51 find_format_all()
52 find_format_all_copy()

切割
1 find_all() 查找所有匹配的值,并且将这些值放到给定的容器中
 Example:
 string str1("hello world!");
 std::vector<std::string> result;
 find_all(result, str1, "l"); // result = [3]("l","l","l")

2 ifind_all() 查找所有匹配的值,并且将这些值放到给定的容器中(不区分大小写)

3 find_all_regex() 与正则表达式相关,稍后了解

4 split() 按照给定的谓词切割字符串,并且把切割后的值放入到给定的容器中
 Example:
 class SplitNotThisChar
 {
 public:
  SplitNotThisChar(const char ch) : m_char(ch) {}
  bool operator ()(const char &ch) const
  {
   if(ch == m_char)
    return true;
   else
    return false;
  }
 private:
  char m_char;
 };

string str1("hello world!");
 string str2;
 std::vector<std::string> result;
 split(result, str1, SplitNotThisChar('l'));  // result = [4]("he","","o wor","d!")

5 split_regex()  与正则表达式相关,稍后了解

6 iter_find() 按照给定Finder查找字符串,并且把查找到的值放入到给定的容器中
 Example:
 string str1("hello world!");
 std::vector<std::string> result;
 // first_finder为Boost自带的Finder
 iter_find(result, str1, first_finder("l")); // result = [3]("l","l","l")

7 iter_split() 按照给定的Finder切割字符串,并且把切割后的值放入到给定的容器中
 Example:
 string str1("hello world!");
 std::vector<std::string> result;
 iter_split(result, str1, first_finder("l")); // result = [4]("he","","o wor","d!")

Join

Join函数则是和split相反,用于把多个字符串拼接起来。

std::array<string, 3> k = {"hello", "world", "123"};
    cout << join(k, "-");        //输出结果为: hello-world-123

boost之algorithm/string的更多相关文章

  1. 第116讲 boost::algorithm::string之替换和删除

    http://www.360doc.com/content/16/0523/18/29304643_561672752.shtml

  2. UESTC_韩爷的梦 2015 UESTC Training for Search Algorithm & String<Problem N>

    N - 韩爷的梦 Time Limit: 200/100MS (Java/Others)     Memory Limit: 1300/1300KB (Java/Others) Submit Stat ...

  3. UESTC_Palindromic String 2015 UESTC Training for Search Algorithm & String<Problem M>

    M - Palindromic String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 128000/128000KB (Java ...

  4. UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm & String<Problem L>

    L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 43000/43000KB (Java/ ...

  5. UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>

    K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Su ...

  6. UESTC_Eight Puzzle 2015 UESTC Training for Search Algorithm & String<Problem F>

    F - Eight Puzzle Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) ...

  7. UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>

    E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  8. UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm & String<Problem D>

    D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. UESTC_基爷与加法等式 2015 UESTC Training for Search Algorithm & String<Problem C>

    C - 基爷与加法等式 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

随机推荐

  1. swift小结02-基础篇

    闭包      类似于 OC 中的 Block,是一段预先定义好的代码,在需要时执行   闭包表达式格式:  { (形参名称1: 形参类型1, 形参名称2: 形参类型2, ...) -> 返回值 ...

  2. BA Practice Lead Handbook 1 - Why Is Business Analysis Taking The World By Storm?

    The articles in this series are focused on individual Business Analysts and their managers. https:// ...

  3. sql执行计划解析案例(二)

    sql执行计划解析案例(二)   今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...

  4. Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种

    http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ...

  5. [ES7] Descorator: evaluated & call order

    When multiple decorators apply to a single declaration, their evaluation is similar to function comp ...

  6. LabVIEW设计模式系列——移位寄存器

    标准:1.太多移位寄存器会导致连线太多,看起来凌乱,使用簇将变量打包,统一用一个移位寄存器,这样可以减少连线的麻烦2.如果每个变量都使用一个移位寄存器,没有一个名字是很难区分移位寄存器到底属于哪一个变 ...

  7. 自主创建tcpdump/wireshark pcap文件

      pcap文件格式是bpf保存原始数据包的格式,很多软件都在使用,比如tcpdump.wireshark等等,了解pcap格式可以加深对原始数据包的了解,自己也可以手工构造任意的数据包进行测试. p ...

  8. WebService学习笔记系列(三)

    网上有一些提供webservice服务的网站,我们要怎么调用呢? 今天来看个如何调用手机归属地查询服务.这个网站上提供了许多webservice服务,其中包括手机归属地查询服务,我们今天就用wsimp ...

  9. 动态树 Link-Cut Trees

    动态树 动态树问题, 即要求我们维护一个由若干棵子结点无序的有根树组成的森林. 要求这个数据结构支持对树的分割.合并,对某个点到它的根的路径的某些操作,以及对某个点的子树进行的某些操作. 在这里我们考 ...

  10. MyTask4

    最近稍微做了点修改,把几处bug修复了下,另外新增了授权码功能和数据缓冲功能 先看看效果图 1. 如果要把软件做的高大上一些,你可以加一个授权验证,授权码以字符串形式存放在程序里面,当然你也可以另外开 ...