字串格式化輸出範例
C的格式化輸出範例
C的格式化輸出只要懂了就會覺得很簡單,好用,強大,只差沒支援物件
首先需要引入
#include <stdio.h>
並且視情況需要引入string.h
如果我想要在數字前面預留0,例如產生001, 002,這種編號,
printf("%03d", myint);
印出一個預留10個字元空間,浮點數以下顯示5位數的浮點數,最後加上換行
printf("%10.5f\n", myfloat);
如果你是要印影像的數值,可以用下面這段程式碼改一下,輸出會滿整齊的
int h,w
for (h=0 ; h<20 ; ++h)
{
for (w=0 ; w<20 ; ++w)
{
printf("%4d ");
}
printf("\n");
}
另外C提供印到某個空間(Space),或可以說是印到字串的功能,這個功能非常好用,
但是非常危險,許多駭客的溢位攻擊都跟這種有關係,但是我們只是寫學術程式,不用管這麼多。
char mystring_buf[1024]; // 記得必須是靜態陣列或者是有配置空間的char陣列
sprintf(
mystring_buf, "i can do anything with vars %10.5f\t %s\n", myfloat, my_string
);
格式化輸出字串另外有一種是可以指定要輸出的字串長度,會使用到這個方法是為了安全性/空間或者是對非null-terminate string
"%*.s"
有這個函數之後就可以將兩個或多個字串串接起來,我要寫C的程式就會用它來處理多檔案與目錄的問題!
C++的格式化輸出範例
格式速查表
首先會需要引入
#include
<iomanip>
設定輸出寬度為10,文字置左,文字如果大於設定的寬度的話就沒有所謂的置左置右了
cout << setw(10)
<< left << mystring << endl;
設定輸出寬度為10,顯示一般數字格式(如果要換科學記號就改成scientific),文字置右,數字輸出到小數點下1位
cout << setw(10) << fixed << right << setprecision(1) << mynum << endl;
另外可以用ostringstream來處理字串的格式化輸出
ostringstream out_sstring;
out_sstring << setw(10) << fixed << right << setprecision(1) << mynum << endl;
我們輸出時間,PSNR最常會用的設定是
#include <iomanip>
cout << fixed << setprecision(4) << second_time
<< fixed << setprecision(4) << PSNR
<< endl;
如果有用OpenCV的Mat
支援直接C++的cout輸出Mat內容
Mat img;
cout << "MyMat=" << img << endl;
OpenCV還有提供超級方便的format函數
這個函數可以讓你用C的printf功能並回傳給你C++ string 實在好用!!
string my_filename = format("Myfiile_no%03d", myint);
留言