`
lunan
  • 浏览: 77001 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

boost::string(转)

 
阅读更多

boost::algorithm提供了很多字符串算法,包括: 大小写转换; 去除无效字符; 谓词; 查找; 删除/替换; 切割; 连接; 我们用写例子的方式来了解boost::algorithm能够为我们做些什么。

boost::algorithm学习
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; 
一:大小写转换
to_upper() 将字符串转为大写
Example:
string str1(" hello world! ");
to_upper(str1); // str1 == " HELLO WORLD! "

to_upper_copy() 将字符串转为大写,并且赋值给另一个字符串
Example:
string str1(" hello world! ");
string str2;
str2 = to_upper_copy(str1); // str2 == " HELLO WORLD! "

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

二:Trimming(整理,去掉首尾的空格字符)
trim_left() 将字符串开头的空格去掉
Example:
string str1(" hello world! ");
trim_left(str1);      // str1 == "hello world! "

trim_left_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉
Example:
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! "

trim_left_copy() 将字符串开头的空格去掉,并且赋值给另一个字符串
Example:
string str1(" hello world! ");
string str2;
str2 = trim_left_copy(str1); // str2 == "hello world! "

trim_left_copy_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉,并且赋值给另一个字符串
Example:
string str1(" hello world! ");
string str2;
str2 = trim_left_copy_if(str1, NotH);      // str2 == "ello world! "

// 将字符串结尾的空格去掉,示例请参看上面
trim_right_copy_if()
trim_right_if()
trim_right_copy()
trim_right()

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

三:谓词
starts_with() 判断一个字符串是否是另外一个字符串的开始串
Example:
string str1("hello world!");
string str2("hello");
bool result = starts_with(str1, str2); // result == true

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

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

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

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

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

11 all() 判断字符串中的所有字符是否全部满足这个谓词
Example:
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

四:查找
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!"
ifind_first() 从头查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器(不区分大小写)

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

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!"
ifind_nth() 找到第n个匹配的子串(计算从0开始)(不区分大小写)

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!"
find_tail() 找到字符串的后n个字节

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!");

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

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

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

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

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

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

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

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!")

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

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")

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!")

分享到:
评论

相关推荐

    boost::asio::serial下6个工程演示多种串口读取写入方式方法

    boost::asio::serial下6个工程演示多种串口读取写入方式方法,包含simple,with_timeout,async,callback,qt_integration,stream 等多个工程演示多种方式读取,写入串口,char,string ,buffer[]等多种数据格式。

    C++之boost::array的用法

    代码如下:#include &lt;string&gt;  #include   #include &lt;boost&gt;  #include   using namespace std;  int main()  {   boost::array&lt;int&gt; array_temp = {{12, 8, 45, 23, 9}};   sort(array_temp.begin(), ...

    使用c++实现boost::any类

    使用c++实现boost::any类 any类可以存放任意类型数据,如: void test_any() { any any_a1(123); int a2 = any_cast(any_a1); int* p_a2 = any_cast(&any_a1); std::cout *p_a2="*p_a2&lt;&lt;std::endl; any any_b1...

    CPP转Json字符串

    标准json字符串编码使用unicode,即boost 提供的 中拼接起来的字符串采用unicode字符集编码,而很多网页采用编码为utf8。 这个库字符编码采用系统编码,系统采用utf8字符集的话拼接起来字符串就是ut8了;另外在博客...

    boost::spirit解析表达式domo

    C++实现的表达式解析,本程序是利用强大的boost::spirit库实现的。这个东西实在是太强大了。 程序运行结果如下: -----------表达式解析--------- 已定义的函数有:PI,SIN,COS,TAN,,ABS,EXP,LOGN,POW,SQRT,FORMAT,...

    C++ string格式化输出方式

    利用boost的format 头文件 #include &lt;boost&gt; boost::format f = boost::format("%.2f %s %d") % 1.234 %"123" ; std::string s = f.str(); 等同于 boost::format f = boost::format("%.2f %s %d"); f % 1.234 %...

    fhircpp:fhircpp-HL7 FHIR的C ++ API

    boost :: multiprecision :: cpp_dec_float_50 完毕 完毕 乌里 std :: string 完毕 base64Binary std :: string 完毕 立即的 boost :: locale :: date_time 完毕 日期 boost :: locale :: date_time 完毕 约会...

    《C++String深入详解2.0版》PDF

    2.1.1 boost.algorithm.string是什么? 23 2.1.2 相关 23 2.1.3 boost.range导论 23 2.1.4 boost.regex导论 23 2.1.5 boost.algorithm.string的DNA 24 2.2 boost字符串算法解密 24 2.2.1 修剪(trim.hpp) 24 2.2.2 ...

    st_asio_wrapper一组包装boost.asio的c/s框架(2.3版)

    这样带来一个问题,原来所有的接口中的boost::shared_ptr&lt;std::string&gt;数据类型,全部换成了std::string引用,升级到2.3的朋友要注意修改之前重写虚函数的签名,如果不改,则重写肯定不生效,变成了新增加虚函数了...

    st_asio_wrapper——一组包装boost.asio的c/s框架(2.3版)

    这样带来一个问题,原来所有的接口中的boost::shared_ptr&lt;std::string&gt;数据类型,全部换成了std::string引用,升级到2.3的朋友要注意修改之前重写虚函数的签名,如果不改,则重写肯定不生效,变成了新增加虚函数了...

    C++智能指针详解.pdf

    } std::string info_extend; int number; }; 2、std::auto_ptr std::auto_ptr 属于 STL,当然在 namespace std 中,包含头⽂件 #include&lt;memory&gt; 便可以使⽤。std::auto_ptr 能够⽅便的管理单个堆 内存对象。 我们...

    HelloWorld:Hello World 演示测试项目

    你好,世界Hello World 演示测试项目...void fun2 ( std::string str ) { std::cout &lt;&lt; " Fun2 : " &lt;&lt; str&gt; f( boost::bind( &CB::fun2, this, _1 ) );callback_["A"] = f ; boost::get&lt; boost&gt; &gt;(callbac

    Linux下Boost序列化问题解决

    由于项目需要,要使用boost,所以在网上找了一些例子帮助理解,其中遇到很多问题,再次总结记录一下。... std::stringstream ss; void save() { boost::archive::text_oarchive oa(ss); boost::array&lt;

    serial sensordemo.rar

    博文《Linux下libserial库对接串口传感器的实例一》的配套程序,有定长,定时接受传感器的二个例子和一个...解析数据用的是BOOST::string。解析完后使用BOOST::signal把数据串接起来。 工程使用codeblocks打开。

    belle:使用Boost.Beast和Boost.ASIO的C ++ 17中的HTTP Websocket库

    美女使用Boost.Beast和Boost.ASIO的C ++ 17中的HTTP / Websocket库。... 它旨在拥有一个直观的API,合理的默认值和出色的性能。...# include &lt; string&gt;int main (){ // init the server with local address

    《深入学习c++string》2.1版

    2.1.5 boost.algorithm.string的DNA 24 2.2 boost字符串算法解密 24 2.2.1 修剪(trim.hpp) 24 2.2.2 转换(case_conv.hpp) 24 2.2.3 判断式、断言函数(predicate.hpp)【Predicates】 24 2.2.4 查找 24 2.2.5 删除...

    C ++ 17:string_view转换为整数类型

    使用Boost Spirit Qi v2将string_view转换为整数类型

    json.hpp:使用Boost.Spirit的小型C ++ JSON解析库

    json.hpp-使用Boost.Spirit的C ++ JSON解析 json.hpp是使用一个小(小于100行代码的)C ++ JSON解析库用于解析,并为数据... std::string json_string{ " { \" names \" : [ " " { \" name \" : \" Chris \" }, "

    boost入门示例,简单易用

    boost基本入门使用示例,简单,一看就懂! 部分代码如下: int a = lexical_cast("123"); double b = lexical_cast("123.0123456789"); string s0 = lexical_cast&lt;string&gt;(a);

    hana:您的元编程标准库

    助推汉娜 您的元编程标准库总览# include &lt; boost&gt;# include &lt; cassert&gt;# include &lt; string&gt;namespace hana = boost::hana;using namespace hana ::literals ;struct Fish { std::string name; };struct Cat { std::...

Global site tag (gtag.js) - Google Analytics