zoukankan      html  css  js  c++  java
  • boost之algorithm/string

    头文件:

    #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

    生活的残酷,让我们习惯了忘记疲倦,一直奔向远方,追寻着自己的梦想。
  • 相关阅读:
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/L-Arikes/p/4344500.html
Copyright © 2011-2022 走看看