• boost之string_algo


    string_algo是用于处理字符串查找,替换,转换等一系列的字符串算法

    前缀i:表示大小写不敏感

    后缀_copy:表示不变动输入,返回处理结果的拷贝

    后缀_if:表示算法需要一个判断式的谓词函数对象。

    #include <iostream>
    #include <vector>
    #include <string>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	string str("readme.txt");
    	if (ends_with(str,"txt"))//判断后缀
    	{
    		cout << to_upper_copy(str) + " UPPER" <<endl;//大写
    	}
    	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];
    	}
    	return 0;
    }
    

    1.大小写转换,如上。

    2.判断式

    2.1判断式(算法),用于子串的匹配

    starts_with

    ends_with

    contains

    equals

    lexicographcical_compare

    #include <iostream>
    #include <vector>
    #include <string>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	string str("Power Bomb");
    	if (iends_with(str,"bomb"))
    	{
    		cout << "success iends_with" <<endl;
    	}
    	if (ends_with(str,"bomb"))
    	{
    		cout << "success ends_with" <<endl;
    	}
    	if (contains(str,"er"))
    	{
    		cout << "success contains" <<endl;
    	}
    	
    	return 0;
    }
    

     2.2.判断式(函数对象)用于字符串之间的比较

    #include <iostream>
    #include <vector>
    #include <string>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	string str1("Samus");
    	string str2("samus");
    	if (is_equal()(str1,str2))
    	{
    		cout << "is equal" <<endl;
    	}
    	if (is_less()(str1,str2))
    	{
    		cout << "is less" <<endl;
    	}
    	
    	return 0;
    }
    

     2.3.分类(返回函数对象)用于分类

    is_space判断字符是否为空格

    is_alnum判断是否为字符或者数字

    3.修剪

    trim_left,trim_right,trim删除左右两端的空格,使用谓词判断if

    #include <iostream>
    #include <vector>
    #include <string>
    #include <boost/format.hpp>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	format fmt("%s
    ");
    	string str = " samus aran";
    	cout << fmt % trim_copy(str);
    	cout << fmt % trim_left_copy(str);
    	trim_right(str);
    	cout << fmt % str;
    
    	string str2 = "2013 Happy lin Year!";
    	cout << fmt % trim_left_copy_if(str2,is_digit());
    	cout << fmt % trim_right_copy_if(str2,is_punct());
    
    	return 0;
    }
    

    4. 查找

    find_first 查找字符串第一次出现的位置

    find_last 查找字符串最后一次出现的位置

    #include <iostream>
    #include <vector>
    #include <string>
    #include <boost/format.hpp>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	format fmt("%s
    .pos=%d
    ");
    	string str = "Long long ago,there was a king.";
    	iterator_range<string::iterator> rge;
    	rge = find_first(str,"long");
    	cout << fmt %  rge % (rge.begin()-str.begin());
    	
    
    	return 0;
    }
    

    5.替换和删除与查找类似

    #include <iostream>
    #include <vector>
    #include <string>
    #include <boost/format.hpp>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	string str = "Samus beat the monster.
    ";
    	cout << replace_first_copy(str,"Samus","samus");
    	replace_first(str,"beat","kill");
    	cout <<str;
    
    	return 0;
    }
    

    6.分割

    #include <iostream>
    #include <vector>
    #include <string>
    #include <deque>
    #include <list>
    #include <boost/format.hpp>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    
    int main()
    {
    	string str = "Smaus,Link.Zelda::Mario_Luigi+zelda";
    	deque<string> d;
    	ifind_all(d,str,"zELDA");
    	if (d.size())
    	{
    		cout << "split right" <<endl;
    	}
    	list<string> l;
    	split(l,str,is_any_of(",.:_+"));
    	for (list<string>::iterator it = l.begin();it != l.end();++it)
    	{
    		cout << *it <<endl;
    	}
    
    	return 0;
    }
    

     7.合并

    #include <iostream>
    #include <vector>
    #include <string>
    
    #include <boost/assign.hpp>
    #include <boost/algorithm/string.hpp>
    using namespace std;
    using namespace boost;
    using namespace boost::assign;
    
    int main()
    {
    	vector<string> v = list_of("liuwei")("linlin")("ceshi");
    	cout << join(v,"+")<<endl;
    	struct is_contains_i
    	{
    		bool operator()(const string &x)
    		{
    			return contains(x,"i");
    		}
    	};
    	cout << join_if(v,"****",is_contains_i());
    	return 0;
    }
    
  • 相关阅读:
    什么是惯性释放
    hyperworks2019x中模型简化
    optistruct如何将多个约束置于一个约束集合中
    optistruct对称约束设置
    optistruct非线性分析步子步设置
    optistruct怎么调用多核
    ConcurrentHashMap中节点数目并发统计的实现原理
    K:leetcode 5381.查询带键的排列 这题简单,但我还能优化。精益求精,才是算法的乐趣所在!
    K:缓存相关问题
    K:剑指offer-56 题解 谁说数字电路的知识不能用到算法中?从次数统计到逻辑表达式的推导,一文包你全懂
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3261600.html
Copyright © 2020-2023  润新知