本文章所有内容源于《BOOST程序库完全开发指南:深入C++“准”标准库(第3版)》第五章
1. lexical_cast
1.1 功能:
字面值转换,字符串与整数/浮点数之间的字面转换
1.2 头文件:
#include <boost/lexical_cast.hpp>
using namespace boost;
1.3 用法:
using namespace std;
#include <boost/lexical_cast.hpp>
using namespace boost;
#include <iostream>
int main()
{
int x = lexical_cast<int>("100");
long y = lexical_cast<long>("2000");
float pai = lexical_cast<float>("3.14159e5");
double e = lexical_cast<double>("2.71828");
double r = lexical_cast<double>("1.414,xyz", 5);
cout << x << y << pai << e << r << endl;
string str = lexical_cast<string>(456);
cout << str << endl;
cout << lexical_cast<string>(0.618) << endl;
cout << lexical_cast<string>(0x10) << endl;
cout << lexical_cast<bool>("1") << endl;
//lexical_cast<int>("0x100");
//lexical_cast<int>("123L");
}
2. format
2.1 功能:
实现类似于printf()的格式化对象,可以把参数格式化到一个字符串,而且是完全类型安全的。
2.2 头文件:
#include <boost/fromat.hpp>
using namespace boost;
2.3 用法:
#include <iostream>
using namespace std;
#include <boost/format.hpp>
using namespace boost;
//
void case1()
{
cout << format("%s:%d+%d=%d\n") %"sum" % 1 % 2 % (1+2);
format fmt("(%1% + %2%) * %2% = %3%\n");
fmt % 2 % 5 ;
fmt % ((2+5)*5);
cout << fmt.str();
}
//
void case2()
{
format fmt("%05d\t%-8.3f\t% 10s\t%05X\n");
cout << fmt %62 % 2.236 % "123456789" % 48;
format fmt2("%|05d|\t%|-8.3f|\t%| 10s|\t%|05X|\n");
cout << fmt2 %62 % 2.236 % "123456789" % 48;
const format fmt3("%10d %020.8f %010X %10.5e\n");
cout << format(fmt3) %62 % 2.236 % 255 % 0.618;
}
//
#include <iomanip>
using namespace boost;
using boost::io::group;
void case3()
{
format fmt("%1% %2% %3% %2% %1% \n");
cout << fmt %1 % 2 % 3;
fmt.bind_arg(2, 10);
cout << fmt %1 %3;
fmt.clear();
cout << fmt % group(showbase,oct, 111) % 333;
fmt.clear_binds();
fmt.modify_item(1, group(hex, right, showbase,setw(8), setfill('*')));
cout << fmt % 49 % 20 % 100;
}
//
int main()
{
case1();
case2();
case3();
}
3. string_ref
3.1 功能:
轻量化后的string字符串,它只持有字符串的引用,没有内存拷贝,运行效率很高。
3.2 头文件:
#include <boost/utility/string_ref.hpp>
using namespace boost;
3.3 用法:
const char* ch = "asdfdsfsadfsadf"; //字符数组
string str(ch); //标准字符串,有拷贝成本
string_ref s1(ch); //字符数组构造,零拷贝
string_ref s2(str); //标准字符串构造,零拷贝
4. string_algo
4.1 功能:
提供大量字符串操作函数,如大小写无关比较、修剪、特定模式的子串查找、替换和删除、分割、合并等
4.2 头文件:
#include <boost/algorithm/string.hpp>
using namespace boost;
4.3 用法:
5. tokenizer
5.1 功能:
专门用于分词(token)的字符串处理库,可以简单的把一个字符串分解成若干个单词。
5.2 头文件:
#include <boost/tokenizer.hpp>
using namespace boost;
5.3 用法:
#include <cstring>
#include <iostream>
using namespace std;
#include <boost/algorithm/string.hpp>
#include <boost/tokenizer.hpp>
using namespace boost;
template<typename T>
void print(T &tok)
{
for (auto& x : tok)
{ cout << "[" << x << "]"; }
cout << endl;
}
//
void case1()
{
string str("Link raise the master-sword.");
tokenizer<> tok(str);
print(tok);
//for(auto& x: tok)
//{ cout << "["<< x << "]";}
}
//
void case2()
{
char str[] = "Link ;; <master-sword> zelda";
char_separator<char> sep;
tokenizer<char_separator<char>, char*> tok(str, str +strlen(str), sep);
print(tok);
tok.assign(str, str +strlen(str),
char_separator<char>(" ;-", "<>"));
print(tok);
tok.assign(str, str +strlen(str),
char_separator<char>(" ;-<>", "", keep_empty_tokens));
print(tok);
}
//
void case3()
{
string str = "id,100,name,\"mario\"";
escaped_list_separator<char> sep;
tokenizer<escaped_list_separator<char> > tok(str, sep);
print(tok);
}
//
void case4()
{
string str = "2233344445";
int offsets[] = {2,3,4};
offset_separator sep(offsets, offsets + 3, true, false);
tokenizer<offset_separator> tok(str, sep);
print(tok);
tok.assign(str, offset_separator(offsets, offsets + 3, false));
print(tok);
str += "56667";
tok.assign(str, offset_separator(offsets, offsets + 3, true, false));
print(tok);
}
//
template<typename Func, typename String = std::string>
struct tokenizer_wrapper
{
//typedef typename Func::string_type String;
typedef tokenizer<Func, typename String::const_iterator, String > type;
};
void case5()
{
wstring str(L"Link mario samus");
auto p = make_split_iterator(str, first_finder(L" ", is_iequal()));
decltype(p) endp;
for (; p != endp; ++p)
{ wcout << L"[" << *p << L"]" ; }
cout << endl;
char_separator<wchar_t> sep(L" ");
//tokenizer<char_separator<wchar_t>,wstring::const_iterator,
// wstring > tok(str, sep);
tokenizer_wrapper<
char_separator<wchar_t>,wstring>::type tok(str, sep);
for(auto& x : tok)
{ wcout << L"["<< x << L"]"; }
cout << endl;
}
//
int main()
{
case1();
case2();
case3();
case4();
case5();
}
6. xpressive
6.1 功能:
正则表达式处理文本,解决文本处理领域绝大多数问题,诸如验证、匹配、查找、替换等等
6.2 头文件:
混用:
#include <boost/xpressive/xpressive.hpp>
静态:
#include <boost/xpressive/xpressive_static.hpp>
动态:
#include <boost/xpressive/xpressive_dynamic.hpp>