<iomanip>
関数
get_money
get_time
put_money
put_time
quoted
resetiosflags
setbase
setfill
setiosflags
setprecision
setw
get_money
指定された形式を使用して、ストリームから通貨値を抽出し、パラメーターの値を返します。
template <class Money>
T7 get_money(Money& amount, bool use_intl);
パラメーター
amount
抽出した通貨値。
use_intl
true
の場合は、国際対応形式を使用します。 既定値は false
です。
解説
マニピュレーターは、ストリーム str
から抽出されたときに、国際対応形式を示す use_intl
を使用して、str
に関連付けられているロケール ファセット money_get
のメンバー関数 get
を呼び出す formatted input function
として動作するオブジェクトを返します。 成功すると、この呼び出しによって、抽出された通貨値が amount
に格納されます。 その後、マニピュレーターが str
を返します。
Money
は long double
型であるか、str
と同じ要素および特徴パラメーターを持つ basic_string
のインスタンス化である必要があります。
get_time
指定された形式を使用して、ストリームから時刻値を抽出します。 時間構造体として、パラメーターの値を返します。
template <class Elem>
T10 get_time(struct tm *time_ptr, const Elem *time_format);
パラメーター
time_ptr
時間構造体の形式の時刻。
time_format
時刻値を取得するために使用する形式。
解説
マニピュレーターは、ストリーム str
から抽出されたときに、時間構造体を示す tptr
および null で終わる書式文字列の先頭を示す fmt
を使用して、str
に関連付けられているロケール ファセット time_get
のメンバー関数 get
を呼び出す formatted input function
として動作するオブジェクトを返します。 成功した場合、この呼び出しによって、抽出された時刻フィールドに関連付けられている値が時間構造体に格納されます。 その後、マニピュレーターが str
を返します。
例
#include <ctime>
#include <iomanip>
#include <iostream>
int main()
{
std::cout << "Enter a time, for example 15:24 for 3:24pm: ";
struct std::tm when;
std::cin >> std::get_time(&when, "%R");
if (!std::cin.fail())
{
std::cout << "Entered: " << when.tm_hour << " hours, " << when.tm_min << " minutes\n";
}
return (int)std::cin.fail();
}
put_money
指定された形式を使用してストリームに金額を挿入します。
template <class Money>
T8 put_money(const Money& amount, bool use_intl);
パラメーター
amount
ストリームに挿入する金額。
use_intl
マニピュレーターで国際対応形式を使用する必要がある場合は true
に設定し、そうでない場合は false
に設定します。
戻り値
str
を返します。
解説
マニピュレーターは、ストリーム str
に挿入されたときに、str
に関連付けられているロケール ファセット money_put
のメンバー関数 put
を呼び出す書式付き出力関数として動作するオブジェクトを返します。 成功した場合、この呼び出しは、充てん要素として国際対応形式および str.fill()
を示す use_intl を使用して、適切に書式設定された amount
を挿入します。 その後、マニピュレーターが str
を返します。
Money
は long double
型であるか、str
と同じ要素および特徴パラメーターを持つ basic_string
のインスタンス化である必要があります。
put_time
指定された形式を使用して、時間構造体内の時刻値をストリームに書き込みます。
template <class Elem>
T10 put_time(struct tm* time_ptr, const Elem* time_format);
パラメーター
time_ptr
時間構造体で提供される、ストリームに書き込む時刻値。
time_format
時刻値を書き込む形式。
解説
マニピュレーターは、ストリーム str
に挿入されるときに、formatted output function
として動作するオブジェクトを返します。 出力関数は、str
に関連付けられているロケール ファセット time_put
のメンバー関数 put
を呼び出します。 出力関数は、time_ptr
を使用して時間構造体を示し、time_format
を使用して null で終わる書式文字列の先頭を示します。 成功した場合、この呼び出しは、書式文字列からのリテラル テキストと時間構造体からの変換された値を挿入します。 その後、マニピュレーターが str
を返します。
quoted
(C++14 の新機能) >>
演算子と <<
演算子を使用して、文字列とストリームとの間の便利なラウンド トリップを有効にする iostream
マニピュレーター。
quoted(std::string str) // or wstring
quoted(const char* str) //or wchar_t*
quoted(std::string str, char delimiter, char escape) // or wide versions
quoted(const char* str, char delimiter, char escape) // or wide versions
パラメーター
str
std::string
、char*
、文字列リテラル、または未加工の文字列リテラル。あるいはこれらのワイド バージョン (std::wstring
、wchar_t*
など)。
delimiter
文字列の先頭と末尾の区切り記号として使用するユーザー指定の文字またはワイド文字。
escape
文字列内のエスケープ シーケンスのエスケープ文字として使用する、ユーザー指定の文字またはワイド文字。
解説
「挿入演算子と制御形式の使用」を参照してください。
例
この例では、ナロー文字列を使用した既定の区切り文字とエスケープ文字と共に quoted
を使用する方法を示します。 ワイド文字列は、同様にサポートされています。
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;
void show_quoted_v_nonquoted()
{
// Results are identical regardless of input string type:
// string inserted { R"(This is a "sentence".)" }; // raw string literal
// string inserted { "This is a \"sentence\"." }; // regular string literal
const char* inserted = "This is a \"sentence\"."; // const char*
stringstream ss, ss_quoted;
string extracted, extracted_quoted;
ss << inserted;
ss_quoted << quoted(inserted);
cout << "ss.str() is storing : " << ss.str() << endl;
cout << "ss_quoted.str() is storing: " << ss_quoted.str() << endl << endl;
// Round-trip the strings
ss >> extracted;
ss_quoted >> quoted(extracted_quoted);
cout << "After round trip: " << endl;
cout << "Non-quoted : " << extracted << endl;
cout << "Quoted : " << extracted_quoted << endl;
}
int main(int argc, char* argv[])
{
show_quoted_v_nonquoted();
// Keep console window open in debug mode.
cout << endl << "Press Enter to exit" << endl;
string input{};
getline(cin, input);
}
/* Output:
ss.str() is storing : This is a "sentence".
ss_quoted.str() is storing: "This is a \"sentence\"."
After round trip:
Non-quoted : This
Quoted : This is a "sentence".
Press Enter to exit
*/
カスタムの区切り記号やエスケープ文字を指定する方法を次の例に示します。
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;
void show_custom_delimiter()
{
string inserted{ R"("This" "is" "a" "heavily-quoted" "sentence".)" };
// string inserted{ "\"This\" \"is\" \"a\" \"heavily-quoted\" \"sentence\"" };
// const char* inserted{ "\"This\" \"is\" \"a\" \"heavily-quoted\" \"sentence\"" };
stringstream ss, ss_quoted;
string extracted;
ss_quoted << quoted(inserted, '*');
ss << inserted;
cout << "ss_quoted.str() is storing: " << ss_quoted.str() << endl;
cout << "ss.str() is storing : " << ss.str() << endl << endl;
// Use the same quoted arguments as on insertion.
ss_quoted >> quoted(extracted, '*');
cout << "After round trip: " << endl;
cout << "Quoted : " << extracted << endl;
extracted = {};
ss >> extracted;
cout << "Non-quoted : " << extracted << endl << endl;
}
void show_custom_escape()
{
string inserted{ R"(\\root\trunk\branch\nest\egg\yolk)" };
// string inserted{ "\\\\root\\trunk\\branch\\nest\\egg\\yolk" };
stringstream ss, ss_quoted, ss_quoted_custom;
string extracted;
// Use '"' as delimiter and '~' as escape character.
ss_quoted_custom << quoted(inserted, '"', '~');
ss_quoted << quoted(inserted);
ss << inserted;
cout << "ss_quoted_custom.str(): " << ss_quoted_custom.str() << endl;
cout << "ss_quoted.str() : " << ss_quoted.str() << endl;
cout << "ss.str() : " << ss.str() << endl << endl;
// No spaces in this string, so non-quoted behaves same as quoted
// after round-tripping.
}
int main(int argc, char* argv[])
{
cout << "Custom delimiter:" << endl;
show_custom_delimiter();
cout << "Custom escape character:" << endl;
show_custom_escape();
// Keep console window open in debug mode.
cout << endl << "Press Enter to exit" << endl;
string input{};
getline(cin, input);
}
/* Output:
Custom delimiter:
ss_quoted.str() is storing: *"This" "is" "a" "heavily-quoted" "sentence".*
ss.str() is storing : "This" "is" "a" "heavily-quoted" "sentence".
After round trip:
Quoted : "This" "is" "a" "heavily-quoted" "sentence".
Non-quoted : "This"
Custom escape character:
ss_quoted_custom.str(): "\\root\trunk\branch\nest\egg\yolk"
ss_quoted.str() : "\\\\root\\trunk\\branch\\nest\\egg\\yolk"
ss.str() : \\root\trunk\branch\nest\egg\yolk
Press Enter to exit
*/
resetiosflags
指定したフラグをクリアします。
T1 resetiosflags(ios_base::fmtflags mask);
パラメーター
mask
オフにするフラグ。
戻り値
マニピュレーターは、ストリーム str
との間で抽出または挿入するときに、str.setf(ios_base::fmtflags, mask)
を呼び出すオブジェクトを返し、次に str
を返します。setf
と fmtflags
をご覧ください。
例
resetiosflags
の使用例については、setw
を参照してください。
setbase
整数の基数を設定します。
T3 setbase(int base);
パラメーター
base
基数。
戻り値
マニピュレーターは、ストリーム str
との間で抽出または挿入するときに、str.setf(mask, ios_base::basefield)
を呼び出すオブジェクトを返し、次に str
を返します。ios_base::basefield
をご覧ください。 ここで、mask
は、次のように判断されます。
base
が 8 の場合、mask
はios_base::oct
になります。base
が10の場合、mask はios_base::dec
になります。base
が16の場合、mask
はios_base::hex
になります。base
が他の値の場合、mask はios_base::fmtflags(0)
` です。
例
setbase
の使用例については、setw
を参照してください。
setfill
右揃えの表示でスペースを埋めるために使用する文字を設定します。
template <class Elem>
T4 setfill(Elem Ch);
パラメーター
Ch
右揃えの表示でスペースを埋めるために使用する文字。
戻り値
テンプレート マニピュレーターは、ストリーム str
との間で抽出または挿入するときに、str.fill(Ch)
を呼び出すオブジェクトを返し、次に str
を返します。 Elem
型は、ストリーム str
の要素型と同じである必要があります。
例
setfill
の使用例については、setw
を参照してください。
setiosflags
指定したフラグを設定します。
T2 setiosflags(ios_base::fmtflags mask);
パラメーター
mask
設定するフラグ。
戻り値
マニピュレーターは、ストリーム str
との間で抽出または挿入するときに、str.setf(mask)
を呼び出すオブジェクトを返し、次に str
を返します。setf
をご覧ください。
例
setiosflags
の使用例については、setw
を参照してください。
setprecision
浮動小数点値の有効桁数を設定します。
T5 setprecision(streamsize Prec);
パラメーター
Prec
浮動小数点値の有効桁数。
戻り値
マニピュレーターは、ストリーム str
との間で抽出または挿入するときに、str.precision(Prec)
を呼び出すオブジェクトを返し、次に str
を返します。precision
をご覧ください。
例
setprecision
の使用例については、setw
を参照してください。
setw
ストリーム内の次の要素に対して表示フィールドの幅を指定します。
T6 setw(streamsize Wide);
パラメーター
Wide
表示フィールドの幅です。
戻り値
マニピュレーターは、ストリーム str
との間で抽出または挿入するときに、str.width(Wide)
を呼び出すオブジェクトを返し、次に str
を返します。 詳細については、width
を参照してください。
解説
setw
は、ストリーム内の次の要素についてのみ幅を設定します。幅を指定する各要素の前に setw を挿入する必要があります。
例
// iomanip_setw.cpp
// compile with: /EHsc
// Defines the entry point for the console application.
//
// Sample use of the following manipulators:
// resetiosflags
// setiosflags
// setbase
// setfill
// setprecision
// setw
#include <iostream>
#include <iomanip>
using namespace std;
const double d1 = 1.23456789;
const double d2 = 12.3456789;
const double d3 = 123.456789;
const double d4 = 1234.56789;
const double d5 = 12345.6789;
const long l1 = 16;
const long l2 = 256;
const long l3 = 1024;
const long l4 = 4096;
const long l5 = 65536;
int base = 10;
void DisplayDefault( )
{
cout << endl << "default display" << endl;
cout << "d1 = " << d1 << endl;
cout << "d2 = " << d2 << endl;
cout << "d3 = " << d3 << endl;
cout << "d4 = " << d4 << endl;
cout << "d5 = " << d5 << endl;
}
void DisplayWidth( int n )
{
cout << endl << "fixed width display set to " << n << ".\n";
cout << "d1 = " << setw(n) << d1 << endl;
cout << "d2 = " << setw(n) << d2 << endl;
cout << "d3 = " << setw(n) << d3 << endl;
cout << "d4 = " << setw(n) << d4 << endl;
cout << "d5 = " << setw(n) << d5 << endl;
}
void DisplayLongs( )
{
cout << setbase(10);
cout << endl << "setbase(" << base << ")" << endl;
cout << setbase(base);
cout << "l1 = " << l1 << endl;
cout << "l2 = " << l2 << endl;
cout << "l3 = " << l3 << endl;
cout << "l4 = " << l4 << endl;
cout << "l5 = " << l5 << endl;
}
int main( int argc, char* argv[] )
{
DisplayDefault( );
cout << endl << "setprecision(" << 3 << ")" << setprecision(3);
DisplayDefault( );
cout << endl << "setprecision(" << 12 << ")" << setprecision(12);
DisplayDefault( );
cout << setiosflags(ios_base::scientific);
cout << endl << "setiosflags(" << ios_base::scientific << ")";
DisplayDefault( );
cout << resetiosflags(ios_base::scientific);
cout << endl << "resetiosflags(" << ios_base::scientific << ")";
DisplayDefault( );
cout << endl << "setfill('" << 'S' << "')" << setfill('S');
DisplayWidth(15);
DisplayDefault( );
cout << endl << "setfill('" << ' ' << "')" << setfill(' ');
DisplayWidth(15);
DisplayDefault( );
cout << endl << "setprecision(" << 8 << ")" << setprecision(8);
DisplayWidth(10);
DisplayDefault( );
base = 16;
DisplayLongs( );
base = 8;
DisplayLongs( );
base = 10;
DisplayLongs( );
return 0;
}
default display
d1 = 1.23457
d2 = 12.3457
d3 = 123.457
d4 = 1234.57
d5 = 12345.7
setprecision(3)
default display
d1 = 1.23
d2 = 12.3
d3 = 123
d4 = 1.23e+003
d5 = 1.23e+004
setprecision(12)
default display
d1 = 1.23456789
d2 = 12.3456789
d3 = 123.456789
d4 = 1234.56789
d5 = 12345.6789
setiosflags(4096)
default display
d1 = 1.234567890000e+000
d2 = 1.234567890000e+001
d3 = 1.234567890000e+002
d4 = 1.234567890000e+003
d5 = 1.234567890000e+004
resetiosflags(4096)
default display
d1 = 1.23456789
d2 = 12.3456789
d3 = 123.456789
d4 = 1234.56789
d5 = 12345.6789
setfill('S')
fixed width display set to 15.
d1 = SSSSS1.23456789
d2 = SSSSS12.3456789
d3 = SSSSS123.456789
d4 = SSSSS1234.56789
d5 = SSSSS12345.6789
default display
d1 = 1.23456789
d2 = 12.3456789
d3 = 123.456789
d4 = 1234.56789
d5 = 12345.6789
setfill(' ')
fixed width display set to 15.
d1 = 1.23456789
d2 = 12.3456789
d3 = 123.456789
d4 = 1234.56789
d5 = 12345.6789
default display
d1 = 1.23456789
d2 = 12.3456789
d3 = 123.456789
d4 = 1234.56789
d5 = 12345.6789
setprecision(8)
fixed width display set to 10.
d1 = 1.2345679
d2 = 12.345679
d3 = 123.45679
d4 = 1234.5679
d5 = 12345.679
default display
d1 = 1.2345679
d2 = 12.345679
d3 = 123.45679
d4 = 1234.5679
d5 = 12345.679
setbase(16)
l1 = 10
l2 = 100
l3 = 400
l4 = 1000
l5 = 10000
setbase(8)
l1 = 20
l2 = 400
l3 = 2000
l4 = 10000
l5 = 200000
setbase(10)
l1 = 16
l2 = 256
l3 = 1024
l4 = 4096
l5 = 65536