這段時間學習boost庫的使用,撰文一方面留以備用,另一方面就是shared精神。
format主要是用來格式化std::string字符串以及配合std::cout代替C語言printf()
使用format需要#include"boost/format.hpp"
boost::format的格式一般為:
boost::format( "format-string ") % arg1 % arg2 % ... % argN ;注意這里沒有示例對象,format-string代表需要格式化的字符串,后面用重載過的%跟參數
1.format占位符的使用
std::cout<<boost::format("%1% \n %2% \n %3%" )%"first"%"second"%"third";上面例子中%X%表示占位符,%1%就是第一個占位符,%2%就是第二個,后面類推,再后面的%"xxx"就對應着每個占位符,也就是說如果我們寫成:
std::cout<<boost::format("%2% \n %1% \n %3%" )%"first"%"second"%"third";將會輸出
second
first
third
當然我們也可以分開寫,比如:
boost::format fmt("%2% \n %1% \n %3%" );
fmt %"first";
fmt %"second";
fmt %"third";
2.format的交互形式
標題不好,湊合看吧。
我們還可以很方便的把格式化后的實例賦給std::string,如:
boost::format fmt("%1%")%"helloworld";
std::string st=fmt.str();
你可以這樣通過變量格式化,這與int a=5;printf("%d",a);是一個道理,不同的是format是對字符的格式化而不包含輸出。
int a=5; int b=6; std::cout<< boost::format("%1% %2%" )%a%b;
3.format格式化
格式化語法為: [ N$ ] [ flags ] [ width ] [ . precision ] type-char
有兩種版本:C語言和.net版本,我這里就復制粘貼了一段:
//傳統c語言風格 cout << boost::format("\n\n%s" "%1t 十進制 = [%d]\n" "%1t 格式化的十進制 = [%5d]\n" "%1t 格式化十進制,前補'0' = [%05d]\n" "%1t 十六進制 = [%x]\n" "%1t 八進制 = [%o]\n" "%1t 浮點 = [%f]\n" "%1t 格式化的浮點 = [%3.3f]\n" "%1t 科學計數 = [%e]\n" ) % "example :\n" % 15 % 15 % 15 % 15 % 15 % 15.01 % 15.01 % 15.01 << endl; //.net的風格 cout << boost::format("%1%" "%1t 十進制 = [%2$d]\n" "%1t 格式化的十進制 = [%2$5d]\n" "%1t 格式化十進制,前補'0' = [%2$05d]\n" "%1t 十六進制 = [%2$x]\n" "%1t 八進制 = [%2$o]\n" "%1t 浮點 = [%3$f]\n" "%1t 格式化的浮點 = [%3$3.3f]\n" "%1t 科學計數 = [%3$e]\n" ) % "example :\n" % 15 % 15.01 << endl;
boost::format使用還是很不錯的,不過效率不盡人意,所以你需要在效率和使用方便兩個方面取舍