1. 程式人生 > >HDOJ1720|再談IO庫:iostream的格式化輸入輸出

HDOJ1720|再談IO庫:iostream的格式化輸入輸出

HDOJ1720

題目

原題連結
16進位制輸入、10進位制輸出

程式碼

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    int a,b;
    while(cin>>hex>>a>>b)         //hex
        cout<<a+b<<endl;
    return 0;
}

再談IO庫:iostream的格式化輸入輸出

在C++ Primer1中在第八章 2簡要介紹了IO庫的使用,看起來十分簡單,也讓很多人認為其功能簡單。由於各類資訊競賽對輸入輸出格式的嚴苛要求,大量的ACMer、OIer仍然使用C中stdio庫的格式輸入輸出。
其實C++的IO庫的格式控制也是非常強大豐富的,比起stdio更加靈活。這一點在該書的附錄A.3再談IO庫3有所體現。
書中開篇即列出了iostream、iomanip庫中定義的操縱符。

iostream中定義的操縱符
操縱符(加粗項指預設) 用途
boolalpha 真假顯示為true/false
noboolalpha
真假顯示為1/0
showbase 顯示數的基數字首如0x
noshowbase 不顯示基數字首
showpoint 總是顯示小數點
noshowpoint 有小數部分才顯示小數點
showpos 顯示非負數中的+
noshowpos 不顯示費負數中的+
uppercase 在十六進位制中列印0X,科學計數法中列印E 此處原文(譯本和原版)如此,其實表述不準確,這裡主要指在十六進位制和科學計數法中出現的字母大寫,0X的字首是否出現依賴於showbase
nouppercase 在十六進位制中列印0x,科學計數法中列印e 同上
dec 用十進位制顯示
hex 用十六進位制顯示
oct 用八進位制顯示
left 在值的右邊增加填充字元
right 在值的左邊增加填充字元
internal 在符號和值之間增加填充字元
fixed 用小數形式顯示浮點數
scientific 用科學計數法顯示浮點數
flush 重新整理ostream緩衝區
ends 插入空字元,然後重新整理ostream緩衝區
endl 插入換行符,然後重新整理ostream緩衝區
unitbuf 在每個輸出操作之後重新整理緩衝區
nounitbuf 恢復常規緩衝區重新整理
skipws 為輸入操作符跳過空白
noskipws 不為輸入操作符跳過空白
ws “吃掉”空白
iomanip中定義的操縱符
操縱符 用途
setfill(ch) 用ch填充空白
setprecision(n) 將浮點進度置為n
setw(w) 讀寫w個字元的值
setbase(b) 按基數b輸出整數

關於具體的用法,這個部落格講得很好,尤其是關於有效週期的問題

關於改變格式狀態也就是flags的操作,有空再寫篇來說。
未完待續~

  1. 《C++ Primer》第四版
  2. 第八章 標準IO庫
  3. A.3再談IO庫 P688,本文主要引用於此