boost::algorithm(字串演算法庫)
沒什麼說的,需要
#include<boost/algorithm/string.hpp>
1.大小寫轉換
std::string s("test string");
boost::to_upper(s);//轉換為大寫
boost::to_lower(s);//轉換為小寫
std::string str1=boost::to_lower_copy(s);//小寫轉換並賦值
std::string str2=boost::to_upper_copy(s);//大寫轉換並賦值
std::array<string, 3> k = {"hello", "world", "123"}; std::cout << join(k, "-"); //輸出結果為: hello-world-123
2.分割與合併字串
std::string s("test stringa-test stringb-test stringc");
std::vector<std::string> sv;
boost::split(sv,s,boost::is_any_of("-"),boost::token_compress_on);
//Now,sv={"test stringa","test stringb","test stringc"};
3.去掉字串兩邊空格
std::string s(" test string "); boost::trim_left(s);//去掉字串左邊空格 boost::trim_right(s);//去掉字串右邊空格 //現在s="test string" //boost::trim_left_copy(s)和boost::trim_right_copy(s)表示去掉後賦值
trim_left_copy_if() 將字串開頭的符合我們提供的“謂詞”的特定字元去掉,並且賦值給另一個字串
string str1(" hello world! ");
string str2;
str2 = trim_left_copy_if(str1, NotH); // str2 == "ello world! "
總結一下就是凡是有copy就是指向後賦值,有if就判斷謂詞
3.謂詞
std::string s("test string");
boost::starts_with("test");//判斷字串是否以一個字串開始,返回bool
std::string a("sss"); std::string b("sss"); boost::equal(a,b);//判斷字串是否完全匹配
std::string s("test string");
boost::contains("te");//判斷字串是否含有某字串
boost::ends_with("ing");//判斷字串是否以另一個字串結尾;
// boost::iends_with()同上只是不區分大小寫
all()判斷字串中的所有字元是否全部滿足這個謂詞 std::string s("test string");
bool str_equal(const std::string p){
if(boost::equal(p,"test string"))
return true;
return false;
}
boost::all(s,str_equal);
4.查詢字串
這裡複製貼上一段
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!");
5.替換/刪除字串
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()