[ Web Proxy ]
URL:
Viewing: https://ru.cppreference.com/cpp/locale/num_get [Back]  [Original]

std::num_get cppreference.com
cppreference.com

std::num_get

cppreference.com

<metanoindex/>

<tbody> </tbody>
template< class CharT, class InputIt = std::istreambuf_iterator<CharT> > class num_get;
std::num_get bool, unsigned short, unsigned int, long, unsigned long, long long, unsigned long long, float, double, long double, void*. ( cin >> n;) std::num_get / .
:
Class std::num_get encapsulates the rules for parsing string representations of values of type bool, unsigned short, unsigned int, long, unsigned long, long long, unsigned long long, float, double, long double, and void*. The standard formatting input operators (such as cin >> n;) use the std::num_get facet of the I/O stream's locale to parse the text representations of the numbers.
Google.
. .

-
InputIt InputIterator.

, C + +
:
Two specializations and two partial specializations are provided by the standard library and are implemented by all locale objects created in a C++ program:
Google.
. .
<locale>
std::num_get<char>
:
creates narrow string parsing of numbers
Google.
. .
std::num_get<wchar_t>
:
creates wide string parsing of numbers
Google.
. .
std::num_get<char, InputIt>
:
creates narrow string parsing of numbers using custom input iterator
Google.
. .
std::num_get<wchar_t, InputIt>
:
creates wide string parsing of numbers using custom input iterator
Google.
. .

-

char_type CharT
iter_type InputIt

-

num_get
:
constructs a new num_get facet
Google.
. .

(public -)
num_get
:
destructs a num_get facet
Google.
. .

(protected -)
do_get
:
invokes do_get
Google.
. .

(public -)

static std::locale::id id
'
:
id of the locale
Google.
. .

( -)

-

[virtual]
:
parses a number from an input stream
Google.
. .

(virtual protected -)

#include <iostream>
#include <locale>
#include <string>
#include <sstream>
#include <iterator>
int main()
{
    std::string de_double = "1.234.567,89";
    std::string us_double = "1,234,567.89";

    // parse using streams
    std::istringstream de_in(de_double);
    de_in.imbue(std::locale("de_DE"));
    double f1;
    de_in >> f1;

    std::istringstream us_in(de_double);
    us_in.imbue(std::locale("en_US.UTF-8"));
    double f2;
    us_in >> f2;

    std::cout << "Parsing " << de_double << " as double gives " << std::fixed
              << f1 << " in de_DE locale and " << f2 << " in en_US\n";

    // use the facet directly
    std::istringstream s3(us_double);
    s3.imbue(std::locale("en_US.UTF-8"));
    auto& f = std::use_facet<std::num_get<char>>(s3.getloc());
    std::istreambuf_iterator<char> beg(s3), end;
    double f3;
    std::ios::iostate err;
    f.get(beg, end, s3, err, f3);
    std::cout << "parsing " << us_double
              << " as double using raw en_US facet gives " << f3 << '\n';
}

:

Parsing 1.234.567,89 as double gives 1234567.890000 in de_DE locale and 1.234000 in en_US
parsing 1,234,567.89 as double using raw en_US facet gives 1234567.890000

.


( ) []

( ) []
std::basic_istream
(public - std::basic_istream) []

Web Proxy Viewer  |  New URL  |  Original Page