Поделиться через


<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 ведет себя как formatted input function, вызывающий функцию-член get для ограничения языкового стандарта money_get, связанного с str, с использованием use_intl для указания международного формата. Если успешно, вызов сохраняет в amount извлеченное денежное значение. Затем манипулятор возвращает str.

Money должен иметь тип long double или быть экземпляром basic_string с теми же параметрами элемента и признаков, что и str.

get_time

Извлекает значение времени из потока с помощью указанного формата. Возвращает значение в параметре в виде структуры времени.

template <class Elem>
T10 get_time(struct tm *time_ptr, const Elem *time_format);

Параметры

time_ptr
Время в виде структуры времени.

time_format
Формат, используемый для получения значения времени.

Замечания

Манипулятор возвращает объект, который при извлечении из потока str ведет себя как formatted input function, вызывающий функцию-член get для ограничения языкового стандарта time_get, связанного с str, с использованием tptr для указания структуры времени и fmt для указания начала строки формата, завершающейся нулем. В случае успешного выполнения вызов хранит в структуре времени значения, связанные с полями извлеченного времени. Затем манипулятор возвращает 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 ведет себя как форматированная выходная функция, вызывающая функцию-член put для ограничения языкового стандарта money_put, связанного с str. При успешном выполнении вызов вставляет amount подходящий формат, используя use_intl для указания международного формата и str.fill()элемента заливки. Затем манипулятор возвращает str.

Money должен иметь тип long double или быть экземпляром basic_string с теми же параметрами элемента и признаков, что и str.

put_time

Записывает значение времени из структуры времени в поток с использованием указанного формата.

template <class Elem>
T10 put_time(struct tm* time_ptr, const Elem* time_format);

Параметры

time_ptr
Значение времени для записи в поток в виде структуры времени.

time_format
Формат для записи значения времени.

Замечания

Манипулятор возвращает объект, который при вставке в поток str ведет себя как formatted output function. Функция вывода вызывает функцию-член put для ограничения языкового стандарта time_put, связанного с str. Выходная функция используется 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::wstring). wchar_t*

delimiter
Указанный пользователем символ или двухбайтовый символ для использования в качестве разделителя для начала и конца строки.

escape
Указанный пользователем символ или двухбайтовый символ для использования в качестве escape-символа для escape-последовательностей в строке.

Замечания

См. раздел Использование операторов вставки и управление форматом.

Примеры

В этом примере показано, как использовать quoted с разделителем по умолчанию и escape-символ с помощью узких строк. Широкие строки также поддерживаются.

#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
*/

В следующем примере показано, как предоставить пользовательский разделитель или escape-символ:

#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.

Пример

См. setw с примером использования resetiosflags.

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, то маски .ios_base::dec

  • Если base значение равно 16, то mask есть ios_base::hex.

  • Если base имеется другое значение, маски — ios_base::fmtflags(0)".

Пример

См. setw с примером использования setbase.

setfill

Задает символ, который будет использоваться для заполнения пробелов на экране с выравниванием по правому краю.

template <class Elem>
T4 setfill(Elem Ch);

Параметры

Ch
Задает символ, который будет использоваться для заполнения пробелов при показе с выравниванием по правому краю.

Возвращаемое значение

Манипулятор шаблона возвращает объект, который при извлечении из потока или вставке в поток str, вызовов str.fill(Ch), а затем возвращается str. Тип Elem должен совпадать с типом элемента для потока str.

Пример

См. setw с примером использования setfill.

setiosflags

Задает указанные флаги.

T2 setiosflags(ios_base::fmtflags mask);

Параметры

mask
Флажки, которые нужно установить.

Возвращаемое значение

Манипулятор возвращает объект, который при извлечении из потока или вставке в поток str, вызовы str.setf(mask), а затем возвращается str, см. раздел setf.

Пример

См. setw с примером использования setiosflags.

setprecision

Задает точность для значений с плавающей запятой.

T5 setprecision(streamsize Prec);

Параметры

Prec
Точность для значений с плавающей запятой.

Возвращаемое значение

Манипулятор возвращает объект, который при извлечении из потока или вставке в поток str, вызовы str.precision(Prec), а затем возвращается str, см. раздел precision.

Пример

См. setw с примером использования setprecision.

setw

Ширина поля отображения для следующего элемента в потоке.

T6 setw(streamsize Wide);

Параметры

Wide
Ширина поля отображения.

Возвращаемое значение

Манипулятор возвращает объект, который при извлечении из потока или вставке из нее str, вызывается str.width(Wide), а затем возвращается str. Дополнительные сведения см. в разделе width.

Замечания

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>