格式化生成字串的其他方式

2022-09-20 17:33:09 字數 1548 閱讀 9263

除了sprintf函式,c++中還可以使用的格式化字串方式。

#includestd::string s1("qwer");

char c1 = 't';

int a1 = 5;

boost::format wor = boost::format("world%1%hello %3%%2%%4%")%2022%s1%c1%a1;

//或者

boost::format wor = boost::format("%.3f " "%s " "%c " "%05d ")%d1%s1%c1;

wor %a1;

std::string s = wor.str();

std::cout << wor << "\tsize=" << wor.size() << std::endl;

//列印結果為:

//world2022hello tqwer5 size=21

//指定格式

boost::format wor = boost::format("%.3f " "%s " "%c " "%05d ") %d1 %s1 %c1 %a1;

//以上空格都可加可不加

為 2.300 qwer t 00005

#include#includestd::stringstream ss1;

ss1 << "hello " << hhh << std::endl;

std::cout << ss1.str();

可以看到readme中的介紹:implementation of c++20 std::format

如果使用c++20的標準,可以包含format標頭檔案,將fmt::format替換為std::format

按照fmt文件的說法,fmt方式的效率比以上兩種都高

安裝

#編譯安裝fmt庫

git clone .git

cd fmt

mkdir build

cd build

cmake ..

make

sudo make install

檢視

fmt --version

#可以檢視當前安裝的fmt版本

使用

原始碼

#includeint main()  not {}and", 42, hhh, d1);

fmt::print("{}\n", s);

//列印結果:

//the answer 42 not 10and6.00000

}

還可以設定顏色、編譯時檢查格式、列印容器、適配時間格式等,具體參考原始碼內的readme.rst

編譯**,需要鏈結fmt庫

g++ -o main main.cpp -lfmt

或者在cmakelists.txt裡

target_link_libraries(main -lfmt)

字串格式化( 方式 與 format方式)

1 百分號方式 name flags width precision typecode precision 可選,小數點後保留的位數 typecode 必選 注 python中百分號格式化是不存在自動將整數轉換成二進位制表示的方式 s可以接收字串,或任何型別 msg i am s.my hobby ...

Python幾種格式化字串的方式

方式一 百分號 方式,類c的printf,需要分別不同型別。1 匿名tuple。推薦在引數少時用 1 2 姓名 s,年齡 d walker 99 姓名 walker,年齡 99 2 命名dict,字典的key可以重用。1 2 姓名 name s,年齡 age d,工齡 age d 姓名 walker...

C 字串格式化的幾種方式

使用snprintf格式化字串 使用boost format格式化字串 使用stringstream格式化字串 使用snprintf格式化字串 include using std string 準備資料 string haha haha int num 3 準備格式 string fmt test ...