Namespaces
Variants

std::numpunct<CharT>:: grouping, std::numpunct<CharT>:: do_grouping

From cppreference.net
Definiert im Header <locale>
public :
std:: string grouping ( ) const ;
(1)
protected :
virtual std:: string do_grouping ( ) const ;
(2)
1) Öffentliche Memberfunktion, ruft die Memberfunktion do_grouping der am stärksten abgeleiteten Klasse auf.
2) Gibt einen std::string zurück, der in jedem char -Element die Anzahl der Ziffern in jeder Gruppe der numerischen Ausgabe enthält, die von num_put::put() formatiert wurde (und daher auch von basic_ostream::operator<< ).

Diese Funktion gibt einen String zurück, vec , der als Vektor von ganzzahligen Werten verwendet wird. (Zum Beispiel, " \003 " spezifiziert Gruppen von jeweils 3 Ziffern, während "3" Gruppen von jeweils 51 Ziffern impliziert.). Jedes Element vec [ i ] repräsentiert die Anzahl der Ziffern in der i -ten Zifferngruppe des ganzzahligen Teils der Zahl, von rechts gezählt: vec [ 0 ] enthält die Anzahl der Ziffern in der rechtesten Gruppe, vec [ 1 ] - in der zweiten Gruppe von rechts, usw. Die Gruppierung, die durch das letzte Zeichen angegeben wird, vec [ vec. size ( ) - 1 ] , wird wiederholt verwendet, um alle verbleibenden Ziffern im (linken Teil der) Zahl zu gruppieren. Wenn vec [ i ] nicht positiv ist oder gleich CHAR_MAX ist, ist die Größe der entsprechenden Zifferngruppe unbegrenzt.

Rückgabewert

Das Objekt vom Typ std::string , das die Gruppen enthält. Die Standard-Spezialisierungen von std::numpunct geben einen leeren String zurück, was auf keine Gruppierung hinweist. Typische Gruppierungen (z.B. das en_US -Locale) geben " \003 " zurück.

Beispiel

#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'
              << "Same, for a floating-point number: "
              << std::fixed << 123456789.123456789 << '\n';
}

Ausgabe:

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
Same, for a floating-point number: 123,456,78,9.123457

Siehe auch

stellt das Zeichen zur Verwendung als Tausendertrennzeichen bereit
(geschützte virtuelle Elementfunktion)