C++/iomanip
< C++
iomanip是w:C++標準程式庫中的一個w:頭文件,定義了C++標準中的流輸入輸出的有參數的操縱器(monipulator)。
流的操縱器(monipulator),無參例子:
std::ostream& imbueFacet(std::ostream& ostream)
{
ostream.imbue(std::locale{ ostream.getloc(), new custom_facet{} });
return ostream;
}
概述
編輯- C++98
- resetiosflags : 重置輸入或輸出流的格式化標記。
- setiosflags : 設置輸入或輸出流的格式化標價。
- setbase : 設置進制,支持8進制、10進制、16進制。
- setfill : 設置std::setw將填充什麼樣的字符,如:std::setfill('*')
- setprecision : 設置浮點數的精度。
- setw : 設置填充多少個字符,默認填充的字符為' '空格。 setw 只為緊隨其後的值建立一個字段寬度。打印該值後,流將回到其默認的打印方式。
- C++11:用於在輸入流或輸出流中,按照浸染的locale以及給定的格式化字符串fmt,分析輸入/輸出的字符形式的時間值或金額,存儲在相應的結構變量中。注意,money用long double或string類型表示,並且是包括了輔幣的整型值,例如$1.23實際表示為123.
- get_money : 根據本地設置,從輸入流中提取money值。
- put_money : 根據本地設置,輸出money值。
- get_time : 根據本地設置,從輸入流中提取time值。
- put_time : 根據本地設置,輸出time值。
- C++14
- quoted : 輸入或輸出引號括起來的字符 (quoted string,例如,XML和CSV格式的字符串)。能夠確保帶有嵌入空格的字符串在提取和插入的時候內容保持不變(skipws標誌被關閉)。字符串中的轉義字符被正確處理。
- 在<ios>頭文件中,還有:
- std::boolalpha, std::noboolalpha 布爾值是顯示為0和1(默認)還是顯示為文本形式
- std::showbase, std::noshowbase整數輸出是否顯式基數前綴如0x
- showpoint,noshowpoint 浮點數是否總是顯式小數點
- showpos,noshowpos 非負數是否總是顯式 + 號
- skipws,noskipws 輸入時是否跳過前導空格
- uppercase,nouppercase 輸出時是否大寫字符
- unitbuf,nounitbuf 每次輸出是否自動刷新緩衝區
- internal,left,right 填充時的中、左、右對齊
- dec,hex,oct 數值輸入輸出的進制
- fixed,scientific,hexfloat,defaultfloat 數值輸入輸出的格式
- <istream>頭文件中:
- ws 消耗空格
- <ostream>頭文件中:
- ends 輸出'\0'
- flush 刷新輸出流
- endl 輸出'\n'並刷新輸出流
- emit_on_flush,noemit_on_flush C++20,控制流的basic_syncbuf在刷新時是否emit
- flush_emit C++20 flushes a stream and emits the content if it is using a basic_syncbuf
例子
編輯#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
int main()
{
std::tm t = {};
std::istringstream ss("2011-Februar-18 23:12:34");
ss.imbue(std::locale("de_DE.utf-8"));
ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
if (ss.fail()) {
std::cout << "Parse failed\n";
} else {
std::cout << std::put_time(&t, "%c") << '\n';
}
}
可能的輸出:
Sun Feb 18 23:12:34 2011