除了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 ...