Boost String Algorithms Library

标签: Boost
494人阅读 评论(0) 收藏 举报
分类:
来自Boost帮助文档

简介

Boost字符串算法库提供了很多操作字符串的算法:大小写转换、去掉字符串首尾空白字符或指定字符、查找、替换、分割等等。

使用方法

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

// ...

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

string str2=
	to_lower_copy(
		ireplace_first_copy(
			str1,"hello","goodbye")); // str2 == "goodbye world!"

命名规则

带_copy后缀的不修改源字符串,返回一个修改后的字符串副本,不带_copy后缀的则原地修改字符串。
带 i 前缀的表示该函数是大小写不敏感的。

字符串转换

string str1("HeLlO WoRld!");
to_upper(str1); // str1=="HELLO WORLD!"

谓词

// 是否是指定字符串结尾
bool is_executable( string& filename )
{
	return 
		iends_with(filename, ".exe") ||
		iends_with(filename, ".com");
}

// ...
string str1("command.com");
cout 
	<< str1
	<< (is_executable(str1)? "is": "is not") 
	<< "an executable" 
	<< endl; // prints "command.com is an executable"

//..
char text1[]="hello";
cout 
	<< text1 
	<< (all( text1, is_lower() )? " is": " is not")
	<< " written in the lower case" 
	<< endl; // prints "hello is written in the lower case"

Trimming

string str1="     hello world!     ";
string str2=trim_left_copy(str1);   // str2 == "hello world!     "
string str3=trim_right_copy(str1);  // str3 == "     hello world!"
trim(str1);                         // str1 == "hello world!"

string phone="00423333444";
// remove leading 0 from the phone number
trim_left_if(phone,is_any_of("0")); // phone == "423333444"

查找

char text[]="hello dolly!";
iterator_range<char*> result=find_last(text,"ll");

transform( result.begin(), result.end(), result.begin(), bind2nd(plus<char>(), 1) );
// text = "hello dommy!"            

to_upper(result); // text == "hello doMMy!"

// iterator_range is convertible to bool
if(find_first(text, "dolly"))
{
	cout << "Dolly is there" << endl;
}

替换

string str1="Hello  Dolly,   Hello World!"
replace_first(str1, "Dolly", "Jane");      // str1 == "Hello  Jane,   Hello World!"
replace_last(str1, "Hello", "Goodbye");    // str1 == "Hello  Jane,   Goodbye World!"
erase_all(str1, " ");                      // str1 == "HelloJane,GoodbyeWorld!"
erase_head(str1, 6);                       // str1 == "Jane,GoodbyeWorld!"

Find Iterator

string str1("abc-*-ABC-*-aBc");
// Find all 'abc' substrings (ignoring the case)
// Create a find_iterator
typedef find_iterator<string::iterator> string_find_iterator;
for(string_find_iterator It=
		make_find_iterator(str1, first_finder("abc", is_iequal()));
	It!=string_find_iterator();
	++It)
{
	cout << copy_range<std::string>(*It) << endl;
}

// Output will be:
// abc
// ABC
// aBC

typedef split_iterator<string::iterator> string_split_iterator;
for(string_split_iterator It=
	make_split_iterator(str1, first_finder("-*-", is_iequal()));
	It!=string_split_iterator();
	++It)
{
	cout << copy_range<std::string>(*It) << endl;
}

// Output will be:
// abc
// ABC
// aBC

分割字符串

string str1("hello abc-*-ABC-*-aBc goodbye");

typedef vector< iterator_range<string::iterator> > find_vector_type;

find_vector_type FindVec; // #1: Search for separators
ifind_all( FindVec, str1, "abc" ); // FindVec == { [abc],[ABC],[aBc] }

typedef vector< string > split_vector_type;

split_vector_type SplitVec; // #2: Search for tokens
split( SplitVec, str1, is_any_of("-*"), token_compress_on ); // SplitVec == { "hello abc","ABC","aBc goodbye" }



查看评论

C++ std::string 与 boost string详细介绍

  • 2009年02月09日 21:37
  • 733KB
  • 下载

BOOST::String

Boost::String #include 1. Header boost::to_upper(str1); //直接改变str1的值 boost::to_lower(str1); strin...
  • Sammy_chan
  • Sammy_chan
  • 2013-01-04 15:52:12
  • 4158

Boost之string处理篇(一)

Boost之string处理篇#include #include #include #include #include using namespace std; using na...
  • u011090298
  • u011090298
  • 2015-05-26 23:26:40
  • 328

boost string_algo

string_algo:  std::string符合容器的定义,可以把它看做元素类型为char(或wchar_t)的序列容器,可以使用标准算法来对它进行运算。  string_algo库是一个非...
  • mmzsyx
  • mmzsyx
  • 2012-11-16 17:46:25
  • 2591

boost::algorithm用法详解之字符串关系判断

下面先列举几个常用的: #define i_end_with boost::iends_with #define i_start_with boost::istarts_with #define...
  • qingzai_
  • qingzai_
  • 2015-03-18 17:58:39
  • 3750

【Boost】boost::string_algo详解1

1. 概述 C++98在标准库中提供了字符串标准类std::string. 它有一些成员函数可以查找子串, 访问字符, 可以执行基本的字符串处理功能. 由于std::string符合容器的定义, 也...
  • huang_xw
  • huang_xw
  • 2012-12-06 23:25:40
  • 6949

【Boost】boost::string_algo详解6——replace相关函数

replace的主要函数(以及其包括的copy函数)包括: replace_range, replace_first, replace_last, replace_nth, replace_head...
  • huang_xw
  • huang_xw
  • 2012-12-25 20:42:58
  • 7428

libboost一些常用库(数据结构,迭代器,算法及字符串)

C++强大的重要原因之一就是它的库。而boost就是这样一个包罗万象的C++库,同时它也是C++标准库的官方后备军。不仅实用,功能全,而且灵活,高效,质量高。无论是学习或项目,都是有力的工具。下面罗列...
  • ariesjzj
  • ariesjzj
  • 2016-07-16 11:45:14
  • 4106

在Visual Studio 2013上编译boost 1.55并生成libboost_thread

转自: http://srcflow.info/visual-studio-2013boost-155.html#.U3hFjsQW071   在Visual Studio2013(msvc12...
  • ihc523
  • ihc523
  • 2014-05-18 16:25:54
  • 8021

【Boost】boost::algorithm的几个简单例子

void test_foreach() { using namespace boost::assign; std::vector v; v += 1, 2, 3, 4, 5, 6, 7, 8, ...
  • huang_xw
  • huang_xw
  • 2012-12-29 20:07:32
  • 3731
    个人资料
    持之以恒
    等级:
    访问量: 8万+
    积分: 1110
    排名: 4万+
    个人主页
    最新评论