這段時間一直在學習slam方面的東西,偶爾遇到boost,在這裡做個筆記以方便日後使用。
format主要是用來格式化std::string字串以及配合std::cout代替c語言printf()
使用format需要#include"boost/format.hpp"
boost::format的格式一般為:
boost::format( "format-string ") % arg1 % arg2 % ... % argn ;
注意這裡沒有示例物件,format-string代表需要格式化的字串,後面用過載過的%跟引數
std::cout《上面例子中%x%表示佔位符,%1%就是第乙個佔位符,%2%就是第二個,後面類推,再後面的%"***"就對應著每個佔位符,也就是說如果我們寫成:
std::cout《將會輸出
second
first
third
當然我們也可以分開寫,比如:
boost::format fmt("%2% \n %1% \n %3%" );
fmt %"first";
fmt %"second";
fmt %"third";
標題不好,湊合看吧。
我們還可以很方便的把格式化後的例項賦給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;
格式化語法為: [ 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使用還是很不錯的,不過效率不盡人意,所以你需要在效率和使用方便兩個方面取捨 c 中Split函式的使方法
split函式 描述 返回乙個下標從零開始的一維陣列,它包含指定數目的子字串。語法 split expression delimiter count compare split函式語法有如下幾部分 部分描述 expression 必需的。包含子字串和分隔符的字串表示式 如果expression是乙個...
C 中string中的erase函式怎麼使用
erase函式的原型如下 1 string erase size t pos 0,size t n npos 2 iterator erase iterator position 3 iterator erase iterator first,iterator last 也就是說有三種用法 1 er...
C 中string中的erase函式怎麼使用
erase函式的原型如下 1 string erase size t pos 0,size t n npos 2 iterator erase iterator position 3 iterator erase iterator first,iterator last 也就是說有三種用法 1 er...