boost::format(字符串格式化庫)


這段時間學習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使用還是很不錯的,不過效率不盡人意,所以你需要在效率和使用方便兩個方面取舍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM