HDOJ1720|再談IO庫:iostream的格式化輸入輸出
阿新 • • 發佈:2019-01-31
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的操作,有空再寫篇來說。
未完待續~