Dela via


<iomanip> funktioner

Rubriken <iomanip> innehåller följande funktioner:

get_money

Extraherar ett monetärt värde från en dataström med det angivna formatet och returnerar värdet i en parameter.

template <class Money>
T7 get_money(Money& amount, bool use_intl);

Parameterar

amount
Det extraherade monetära värdet.

use_intl
Om trueanvänder du internationellt format. Standardvärdet är false.

Anmärkningar

Manipulatorn returnerar ett objekt som när det extraheras från dataströmmen strfungerar som en formatted input function som anropar medlemsfunktionen get för språkvarianten money_get som är associerad med str, med hjälp av use_intl för att ange internationellt format. Om det lyckas lagras anropet i amount det extraherade monetära värdet. Manipulatorn returnerar strsedan .

Money måste vara av typen long double eller en instansiering av basic_string med samma element- och egenskapsparametrar som str.

get_time

Extraherar ett tidsvärde från en ström med det angivna formatet. Returnerar värdet i en parameter som en tidsstruktur.

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

Parameterar

time_ptr
Tiden i form av en tidsstruktur.

time_format
Det format som ska användas för att hämta tidsvärdet.

Anmärkningar

Manipulatorn returnerar ett objekt som när det extraheras från strömmen strfungerar som en formatted input function som anropar medlemsfunktionen get för språkvarianten time_get som är associerad med str, med hjälp tptr av för att ange tidsstrukturen och fmt för att ange början på en null-avslutad formatsträng. Om det lyckas lagrar anropet i tidsstrukturen de värden som är associerade med extraherade tidsfält. Manipulatorn returnerar strsedan .

Exempel

#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

Infogar en penningmängd med det angivna formatet i en ström.

template <class Money>
T8 put_money(const Money& amount, bool use_intl);

Parameterar

amount
Det ekonomiska belopp som ska infogas i strömmen.

use_intl
Ange till true om manipulatorn ska använda internationellt format, false om det inte borde det.

Returvärde

Returnerar str.

Anmärkningar

Manipulatorn returnerar ett objekt som när det infogas i dataströmmen strfungerar som en formaterad utdatafunktion som anropar medlemsfunktionen put för språkvarianten money_put som är associerad med str. Om det lyckas infogas amount anropet lämpligt formaterat med hjälp av use_intl för att ange internationellt format och str.fill(), som fyllningselement. Manipulatorn returnerar strsedan .

Money måste vara av typen long double eller en instansiering av basic_string med samma element- och egenskapsparametrar som str.

put_time

Skriver ett tidsvärde från en tidsstruktur till en dataström med ett angivet format.

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

Parameterar

time_ptr
Tidsvärdet för att skriva till strömmen, som anges i en tidsstruktur.

time_format
Formatet för att skriva tidsvärdet.

Anmärkningar

Manipulatorn returnerar ett objekt som när det infogas i dataströmmen strfungerar som en formatted output function. Utdatafunktionen anropar medlemsfunktionen put för språkvarianten time_put som är associerad med str. Utdatafunktionen använder time_ptr för att ange tidsstrukturen och time_format för att ange början på en null-avslutad formatsträng. Om det lyckas infogar anropet literaltext från formatsträngen och konverterade värden från tidsstrukturen. Manipulatorn returnerar strsedan .

quoted

(Ny i C++14) En iostream manipulator som möjliggör bekväm rund tripping av strängar till och från strömmar med hjälp av operatorerna >> och << .

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

Parameterar

str
En std::stringsträngliteral char*eller rå strängliteral eller en bred version av någon av dessa (till exempel std::wstring, wchar_t*).

delimiter
Ett användarangivet tecken, eller ett brett tecken, som ska användas som avgränsare för början och slutet av strängen.

escape
Ett användardefingivet tecken, eller ett brett tecken, som ska användas som escape-tecken för escape-sekvenser i strängen.

Anmärkningar

Se Använda infogningsoperatorer och kontrollera format.

Exempel

Det här exemplet visar hur du använder quoted med standard avgränsaren och escape-tecknet med hjälp av smala strängar. Breda strängar stöds lika mycket.

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

I följande exempel visas hur du anger en anpassad avgränsare eller escape-tecken:

#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

Rensar de angivna flaggorna.

T1 resetiosflags(ios_base::fmtflags mask);

Parameterar

mask
Flaggorna att rensa.

Returvärde

Manipulatorn returnerar ett objekt som när det extraheras från eller infogas i strömmen stranropar str.setf(ios_base::fmtflags, mask)och sedan returnerar str, se setf och fmtflags.

Exempel

Se setw ett exempel på hur du använder resetiosflags.

setbase

Ange bas för heltal.

T3 setbase(int base);

Parameterar

base
Talbasen.

Returvärde

Manipulatorn returnerar ett objekt som när det extraheras från eller infogas i dataströmmen stranropar str.setf(mask, ios_base::basefield)och sedan returnerar str, se ios_base::basefield. mask Här bestäms på följande sätt:

Exempel

Se setw ett exempel på hur du använder setbase.

setfill

Anger det tecken som ska användas för att fylla blanksteg i en högerjusterad skärm.

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

Parameterar

Ch
Tecknet som ska användas för att fylla blanksteg i en högerjusterad visning.

Returvärde

Mallmanipulatören returnerar ett objekt som när det extraheras från eller infogas i dataströmmen stranropar str.fill(Ch)och sedan returnerar str. Typen Elem måste vara samma som elementtypen för strömmen str.

Exempel

Se setw ett exempel på hur du använder setfill.

setiosflags

Anger de angivna flaggorna.

T2 setiosflags(ios_base::fmtflags mask);

Parameterar

mask
Flaggorna som ska anges.

Returvärde

Manipulatorn returnerar ett objekt som när det extraheras från eller infogas i dataströmmen stranropar str.setf(mask)och sedan returnerar str, se setf.

Exempel

Se setw ett exempel på hur du använder setiosflags.

setprecision

Anger precisionen för flyttalsvärden.

T5 setprecision(streamsize Prec);

Parameterar

Prec
Precisionen för flyttalsvärden.

Returvärde

Manipulatorn returnerar ett objekt som när det extraheras från eller infogas i dataströmmen stranropar str.precision(Prec)och sedan returnerar str, se precision.

Exempel

Se setw ett exempel på hur du använder setprecision.

setw

Anger bredden på visningsfältet för nästa element i strömmen.

T6 setw(streamsize Wide);

Parameterar

Wide
Visningsfältets bredd.

Returvärde

Manipulatorn returnerar ett objekt som, när det extraheras från eller infogas i strömmen str, anropar str.width(Wide)och sedan returnerar str. Mer information finns i width.

Anmärkningar

setw anger endast bredden för nästa element i strömmen och måste infogas före varje element vars bredd du vill ange.

Exempel

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

Se även

<iomanip>