std::numpunct::grouping, do_grouping - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::numpunct::grouping, do_grouping

From cppreference.com
< cpp‎ | locale‎ | numpunct

Defined in header `<locale>` |  |
public: std::string grouping() const; | (1) |
protected: virtual std::string do_grouping() const; | (2) |

1) Public member function, calls the member function `do_grouping` of the most derived class.
2) Returns an std::string holding, in each char element, the number of digits in each group of the numeric output formatted by `num_put::put()` (and, therefore, `basic_ostream::operator<<`)

The groups are stored as binary values: three-digit group is '\3', and 51-digit group is '3'. The character at index zero of the returned string holds the number of digits in the rightmost group. The character at index 1 holds the number of digits in the second group from the right, etc. The grouping indicated by the last character in the returned string is reused to group all remaining digits in the (left part of) the number.

### [edit] Return value

The object of type std::string holding the groups. The standard specializations of `std::numpunct` return an empty string, indicating no grouping. Typical groupings (e.g. the `en_US` locale) return "\003".

### [edit] Example

Run this code

    #include <iostream>
    #include <limits>
    #include <locale>

    struct space_out : std::numpunct<char>
    {
        char do_thousands_sep()   const { return ' ';  } // separate with spaces
        std::string do_grouping() const { return "\1"; } // groups of 1 digit
    };

    struct g123 : std::numpunct<char>
    {
        std::string do_grouping() const { return "\1\2\3"; }
    };

    int main()
    {
        std::cout << "default locale: " << 12345678 << '\n';
        std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
        std::cout << "locale with modified numpunct: " << 12345678 << '\n';
        std::cout.imbue(std::locale(std::cout.getloc(), new g123));
        std::cout << "Locale with \\1\\2\\3 grouping: " <<
                  std::numeric_limits<unsigned long long>::max() << '\n';
    }

Output:

    default locale: 12345678
    locale with modified numpunct: 1 2 3 4 5 6 7 8
    Locale with \1\2\3 grouping: 18,446,744,073,709,551,61,5

### [edit] See also

do_thousands_sep [virtual] | provides the character to use as thousands separator (virtual protected member function) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/locale/numpunct/grouping&oldid=63918"