boost::algorithm簡介git
2007-12-08 16:59正則表達式
boost::algorithm提供了不少字符串算法,包括: 大小寫轉換; 去除無效字符; 謂詞; 查找; 刪除/替換; 切割; 鏈接; 咱們用寫例子的方式來了解boost::algorithm可以爲咱們作些什麼。算法
boost::algorithm學習
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
一:大小寫轉換
1 to_upper() 將字符串轉爲大寫
Example:
string str1(" hello world! ");
to_upper(str1); // str1 == " HELLO WORLD! "
2 to_upper_copy() 將字符串轉爲大寫,而且賦值給另外一個字符串
Example:
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() 將字符串開頭的空格去掉
Example:
string str1(" hello world! ");
trim_left(str1); // str1 == "hello world! "
2 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! "
3 trim_left_copy() 將字符串開頭的空格去掉,而且賦值給另外一個字符串
Example:
string str1(" hello world! ");
string str2;
str2 = trim_left_copy(str1); // str2 == "hello world! "
4 trim_left_copy_if() 將字符串開頭的符合咱們提供的「謂詞」的特定字符去掉,而且賦值給另外一個字符串
Example:
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() 判斷一個字符串是不是另一個字符串的開始串
Example:
string str1("hello world!");
string str2("hello");
bool result = starts_with(str1, str2); // result == true
2 istarts_with() 判斷一個字符串是不是另一個字符串的開始串(不區分大小寫)
Example:
string str1("hello world!");
string str2("Hello");
bool result = istarts_with(str1, str2); // result == truespa
3 ends_with() 判斷一個字符串是不是另一個字符串的結尾串
4 iends_with() 判斷一個字符串是不是另一個字符串的結尾串(不區分大小寫)3d
5 contains() 判斷一個字符串是否包含另一個字符串
Example:
string str1("hello world!");
string str2("llo");
bool result = contains(str1, str2); // result == true
6 icontains() 判斷一個字符串是否包含另一個字符串(不區分大小寫)orm
7 equals() 判斷兩個字符串是否相等
8 iequals() 判斷兩個字符串是否相等(不區分大小寫)排序
9 lexicographical_compare() 按照字典排序,若是第一個字符串小於第二個字符串,返回true (個人boost1.33沒有實現?)
10 ilexicographical_compare() 按照字典排序,若是第一個字符串小於第二個字符串,返回true(不區分大小寫)(個人boost1.33沒有實現?token
)
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
四:查找
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!"
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;