boost——字符串与文本处理string_algo(一)

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>

using namespace boost;
using namespace std;


int main( int argc,char **argv)
{
    string str("readme.txt");
    if(ends_with(str,"txt")){
         cout << to_upper_copy(str) + "UPPER" << endl;
         assert(ends_with(str,"txt"));
    }   
    replace_first(str,"readme","followme");
    cout << str << endl;
    vector<char> v(str.begin(),str.end());
    vector<char> v2 = to_upper_copy(erase_first_copy(v,"txt"));
    for(int i = 0;i < v2.size();++i){
         cout << v2[i] ;
    }
    cout << endl;

    /*大小写转换*/
    string str1("I Don't Known.\n");
    cout << to_upper_copy(str1) << endl;
    cout << str1 << endl;
    to_lower(str1);
    cout << str1 << endl;

    /*判断式算法*/
    string str2("Power Bob");
    assert(iends_with(str2,"bob")); //忽略大小写,后缀比较
    assert(!ends_with(str2,"bob")); //不忽略大小写,后缀比较

    assert(starts_with(str2,"Pow"));    //检测前缀
    assert(contains(str2,"er"));    //检测包含关系

    string str3 = to_lower_copy(str2);  //转换小写
    assert(iequals(str3,str2));     //大小写无关判断相等

    string str4("power suit");
    assert(ilexicographical_compare(str2,str4));    //大小无关比较
    assert(all(str3.substr(0,5),is_lower()));   //检测大小写均小写

    /*判断式函数对象*/
    string str5("Anna");
    string str6("anna");
    assert(!is_equal()(str5,str6));
    assert(is_less()(str5,str6));

    /*修剪与分类*/
    format fmt("|%s|\n");
    string str7 = "   samus aran  ";
    cout << fmt % trim_copy(str7) << endl;      //删除两端的空格
    cout << fmt % trim_left_copy(str7) << endl; //删除左端空格
    trim_right(str7);       //原地删除右端的空格
    cout << fmt % str7;

    string str8 = "2016 hello world!";
    cout << str8 << endl;
    cout << fmt % trim_left_copy_if(str8,is_digit());
    cout << fmt % trim_right_copy_if(str8,is_punct());
    cout << fmt % trim_copy_if(str8,is_punct() || is_digit() || is_space());//删除两端的标点、数字和空格

    /*查找*/
    string str9 = "Long long ago,there was a king";
    format fmt2("|%s|.pos = %d\n");
    iterator_range<string::iterator> rge;   //迭代器区间
    rge = find_first(str9,"long");      //查找第一次出现
    cout << fmt2 % rge %(rge.begin()-str9.begin());
    rge = ifind_first(str9,"long"); //与大小写无关的第一次出现的位置
    cout << fmt2 % rge %(rge.begin()-str9.begin());

    rge = find_nth(str9,"ng",2);    //第三次出现的位置
    cout << fmt2 % rge %(rge.begin()-str9.begin());
    rge = find_head(str9,4);    //查找前四个字符
    cout << fmt2 % rge %(rge.begin()-str9.begin());
    rge = find_tail(str9,5);    //查找后五个字符
    cout << fmt2 % rge %(rge.begin()-str9.begin());
    rge = find_first(str9,"ewy89"); //若没找到
    assert(rge.empty() && !rge);    

    /*替换与删除*/
    string str10 = "Long long ago,there was a king\n";
    cout << replace_first_copy(str10,"long","Long ");
    replace_last(str10,"ng","mm");
    cout << str10 << endl;
    replace_tail(str10,4,"wwww");
    cout << str10 << endl;
    cout << ierase_all_copy(str10,"ago");
    cout << replace_nth_copy(str10,"e",1,"1");
    cout << erase_tail_copy(str10,10);




     return (0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值