次の方法で共有


<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 を返します。

Moneylong 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 を返します。

Moneylong 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::stringchar*、文字列リテラル、または未加工の文字列リテラル。あるいはこれらのワイド バージョン (std::wstringwchar_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 を返します。setffmtflags をご覧ください。

resetiosflags の使用例については、setw を参照してください。

setbase

整数の基数を設定します。

T3 setbase(int base);

パラメーター

base
基数。

戻り値

マニピュレーターは、ストリーム str との間で抽出または挿入するときに、str.setf(mask, ios_base::basefield) を呼び出すオブジェクトを返し、次に str を返します。ios_base::basefield をご覧ください。 ここで、mask は、次のように判断されます。

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

関連項目

<iomanip>