Difference between revisions of "cpp/locale/num get"
m (Text replace - "{{tdcl" to "{{dcl") |
m (Text replace - "/sidebar" to "/navbar") |
||
Line 1: | Line 1: | ||
{{cpp/title|num_get}} | {{cpp/title|num_get}} | ||
− | {{cpp/locale/num_get/ | + | {{cpp/locale/num_get/navbar}} |
{{ddcl list begin}} | {{ddcl list begin}} | ||
{{ddcl list header | locale}} | {{ddcl list header | locale}} |
Revision as of 13:24, 15 June 2012
Template:ddcl list begin <tr class="t-dsc-header">
<td><locale>
<td></td> <td></td> </tr> <tr class="t-dcl ">
<td class="t-dcl-nopad"> class InputIterator = std::istreambuf_iterator<charT>
<td class="t-dcl-nopad"> </td> <td class="t-dcl-nopad"> </td> </tr> Template:ddcl list end
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.
Two specializations and two partial specializations are provided by the standard library and are implemented by all locale objects created in a C++ program:
Defined in header
<locale> | |
std::num_get<char> | creates narrow string parsing of numbers |
std::num_get<wchar_t> | creates wide string parsing of numbers |
std::num_get<char, InputIterator> | creates narrow string parsing of numbers using custom input iterator |
std::num_get<wchar_t, InputIterator> | creates wide string parsing of numbers using custom input iterator |
Contents |
Member types
Member type | Definition |
char_type
|
charT
|
iter_type
|
InputIterator
|
Member objects
Member name | Type |
id (static)
|
std::locale::id |
Member functions
constructs a new num_get facet (public member function) | |
destructs a num_get facet (protected member function) | |
invokes do_get (public member function) |
Protected member functions
[virtual] |
parses a number from an input stream (virtual protected member function) |
Example
#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'; }
Output:
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