C 標準庫筆記 13 7 格式化

2021-08-02 01:33:26 字數 4442 閱讀 6540

格式標誌可以控制輸入輸出的格式,比如是否在正數前加+號,用八進位制、十進位制、十六進製制來顯示資料等。

以下是訪問格式標誌的成員函式(定義在ios_base類中)

成員函式

意義setf(flags)

增加標誌,返回修改前的所有標誌

setf(flags, mask)

增加標誌,mask引數存放的標誌則被清除,返回修改前的所有標誌

unsetf(flags)

清除標誌

flags()

返回當前所有標誌

flags(flags)

將flags設為新的格式標誌,返回修改前的所有標誌

copyfmt(stream)

從stream中複製所有格式定義

說明:

setf(flags, mask)舉例:std::cout.sef( std::ios::hex, std::ios::basefield);

其中標誌位ios::basefield是hex|oct|dec三個標誌的組合,其它標誌位定義參考如下,

static

const _fmtflags skipws = (_fmtflags)_iosskipws;

static

const _fmtflags unitbuf = (_fmtflags)_iosunitbuf;

static

const _fmtflags uppercase = (_fmtflags)_iosuppercase;

static

const _fmtflags showbase = (_fmtflags)_iosshowbase;

static

const _fmtflags showpoint = (_fmtflags)_iosshowpoint;

static

const _fmtflags showpos = (_fmtflags)_iosshowpos;

static

const _fmtflags left = (_fmtflags)_iosleft;

static

const _fmtflags right = (_fmtflags)_iosright;

static

const _fmtflags internal = (_fmtflags)_iosinternal;

static

const _fmtflags dec = (_fmtflags)_iosdec;

static

const _fmtflags oct = (_fmtflags)_iosoct;

static

const _fmtflags hex = (_fmtflags)_ioshex;

static

const _fmtflags scientific = (_fmtflags)_iosscientific;

static

const _fmtflags fixed = (_fmtflags)_iosfixed;

static

const _fmtflags boolalpha = (_fmtflags)_iosboolalpha;

static

const _fmtflags _stdio = (_fmtflags)_ios_stdio;

static

const _fmtflags adjustfield = (_fmtflags)(_iosleft

| _iosright | _iosinternal);

static

const _fmtflags basefield = (_fmtflags)(_iosdec

| _iosoct | _ioshex);

static

const _fmtflags floatfield = (_fmtflags)(_iosscientific

| _iosfixed);

為了與io操作符<<、>>配合使用,實現了以下兩個操控器(帶引數)來設定格式標誌

操控器意義

std::setiosflags(flags)

將flags設為格式標誌(呼叫setf(flags) )

std::resetiosflags(mask)

清除mask所標識的一組標誌(呼叫setf(0, mask) )

例如:

cout << std::resetiosflags( ios::basefield ) << std::setiosflags( ios::hex ) << 15 << endl;

輸出: f

由標誌boolalpha來控制,若設定了此標誌,便以文字表示,否則又資料表示,預設的未被設立。注:此標誌被設立,就一直生效,除非清除此標誌

為了與操作符<<、>>配合使用,實現了以下操控器

操控器意義

std::boolalpha

設立標誌ios::boolalpha

std::noboolalpha

清除標誌ios::boolalpha

例如以下

cout

<< std::boolalpha << true

<< endl;

cout

<< false

<< endl;

輸出的為:

true

false

字段寬度、填充字元由成員函式控制,位置對齊方式則由格式標誌來控制。

成員函式

意義width()

返回當前字元寬度

width(val)

設定當前字元寬度,並返回先前的字元寬度

fill()

返回當前填充字元

fill(c)

設定當前填充字元,並返回先前填充字元

以上**中,函式width呼叫後的作用為一次性的,即執行了任意格式化io操作後,就會恢復width的值為預設狀態。而fill設定的則一直生效,除非重新設定。例如:

//以^符號填充

cout.fill( '^' );

cout.width( 4 );

cout

<< 1

<< endl;

//恢復預設width

cout

<< 1

<< endl;

位置對齊格式標誌如下:

掩碼標誌

意義ios::adjustfield

ios::left

左對齊ios::right

右對齊ios::internal

符號靠左對齊,數值靠右對齊

none

右對齊(預設)

同樣,也提供了對應的操控器

由格式標誌: ios::showpos、ios::uppercase來控制。ios::showpos被設定了,則在正數前顯示+號,ios::uppercase標誌被設定了,則針對十六進製制、科學記號等的字母就以大寫的格式輸出,對字串是不會有影響的。

同樣,也提供了對應的操控器

注:此兩個標誌被設立,就一直生效,除非清除此標誌

由格式標誌控制

同樣的,也有相應的操作器

注:此四個標誌被設立,就一直生效,除非清除此標誌

浮點數表示由格式標誌控制

精度控制成員函式

對應操控器

注:以上標誌被設立,就一直生效,除非清除此標誌,精度被設定,也一樣

格式標誌

操控器注:以上標誌被設立,就一直生效,除非清除此標誌

ios_base類定義了數個成員函式來支援國際化

以下演示std::noskipws的用法:

//此處若輸入(_表空格):_1space

//則啥也不輸出,因為》讀取字串時是以空格來判斷是否結束的

//第乙個空格沒被跳過,表示結束讀取,因為啥也沒讀到,流被設定讀取失敗

std::string strtemp;

std::cin >> std::noskipws;

while( cin >> strtemp )

//此處會乙個字元乙個字元的讀取,空格也會被讀取

//若輸入: _a_b

//則輸出:

//_//a

//_//b

char c;

cin >> std::noskipws;

while( cin >> c )

cout

<< c << endl;

}

2 1格式化輸出

註解的三種方式 1.之後的這一行全為註解 2.之間的內容全是 可以換行 3.後一行都是 這是xml註解 之後會轉換乙個xml檔案 無效表示符 for 關鍵字 3q 不能是數字開頭 count 不可以 可以 console.write 中間不能有.號 ture false 都是給bool布林值 預設為...

(11)格式化輸出

這個模擬較重要,用於格式化翻譯,因為單詞對應的翻譯比較大,有一些例句有幾十條,如果不格式化,返回的講是一大坨,一大坨的,使用者體驗不好 經過這個類的格式化之後,返回的就是一條一條的例句,而不是一大堆 格式化翻譯 class formattrans public function gettrans s...

2 格式化輸出

format 格式化文字並返回結果到字串 print 輸出格式化文字到控制台 println 輸出格式化文字到控制台,並在行尾自動加換行 檔案,format.rc fn main world println hello println hello format println hello this ...