Namensräume
Varianten
Aktionen

std::ctype<char>

Von cppreference.com
< cpp‎ | locale
 
 
 
 
Definiert in Header <locale>
template<>
class ctype<char>;

Diese Spezialisierung von std::ctype kapselt Funktionen zur Zeichenklassifizierung für den Typ char. Im Gegensatz zum Allzweck-std::ctype, das virtuelle Funktionen verwendet, nutzt diese Spezialisierung Tabellen-Lookups zur Klassifizierung von Zeichen (was im Allgemeinen schneller ist).

Die Basisklasse std::ctype<char> implementiert eine Zeichenklassifizierung, die der minimalen "C"-Locale entspricht. Die Klassifizierungsregeln können erweitert oder modifiziert werden, wenn sie mit einem nicht standardmäßigen Klassifizierungstabellen-Argument konstruiert werden, wenn sie als std::ctype_byname<char> oder als benutzerdefinierter abgeleiteter Facet konstruiert werden. Alle formatierten Eingabefunktionen von std::istream müssen beim Parsen der Eingabe std::ctype<char> zur Zeichenklassifizierung verwenden.

cpp/locale/ctype basecpp/locale/locale/facetstd-ctype char-inheritance.svg

Vererbungdiagramm

Inhalt

[bearbeiten] Verschachtelte Typen

Typ Definition
char_type char

[bearbeiten] Datenmember

Mitglied Beschreibung
std::locale::id id [static] die Kennung des Facets
const std::size_t table_size [static] Größe der Klassifizierungstabelle, mindestens 256

[bearbeiten] Memberfunktionen

konstruiert ein neues ctype<char>-Facet
(public member function) [bearbeiten]
zerstört ein ctype<char>-Facet
(protected member function) [bearbeiten]
ruft die Zeichenklassifizierungstabelle ab
(public member function) [bearbeiten]
ruft die Zeichenklassifizierungstabelle der "C"-Locale ab
(public static member function) [bearbeiten]
klassifiziert ein Zeichen oder eine Zeichensequenz unter Verwendung der Klassifizierungstabelle
(public member function) [bearbeiten]
findet das erste Zeichen in einer Sequenz, das der gegebenen Klassifizierung entspricht, unter Verwendung der Klassifizierungstabelle
(public member function) [bearbeiten]
findet das erste Zeichen in einer Sequenz, das die gegebene Klassifizierung nicht erfüllt, unter Verwendung der Klassifizierungstabelle
(public member function) [bearbeiten]
ruft do_toupper auf
(public member function of std::ctype<CharT>) [bearbeiten]
ruft do_tolower auf
(public member function of std::ctype<CharT>) [bearbeiten]
ruft do_widen auf
(public member function of std::ctype<CharT>) [bearbeiten]
ruft do_narrow auf
(public member function of std::ctype<CharT>) [bearbeiten]

[bearbeiten] Geschützte Memberfunktionen

[virtuell]
konvertiert ein Zeichen oder Zeichen in Großbuchstaben
(virtual protected member function of std::ctype<CharT>) [bearbeiten]
[virtuell]
konvertiert ein Zeichen oder Zeichen in Kleinbuchstaben
(virtual protected member function of std::ctype<CharT>) [bearbeiten]
[virtuell]
konvertiert ein Zeichen oder Zeichen von char zu CharT
(virtual protected member function of std::ctype<CharT>) [bearbeiten]
[virtuell]
konvertiert ein Zeichen oder Zeichen von CharT zu char
(virtual protected member function of std::ctype<CharT>) [bearbeiten]

Geerbt von std::ctype_base

Verschachtelte Typen

Typ Definition
mask nicht spezifizierter BitmaskType Typ (Enumeration, Ganzzahltyp oder Bitset)

Member-Konstanten

Leerzeichen
[static]
der Wert von mask, der die Klassifizierung von Leerzeichen kennzeichnet
(öffentliche statische Member-Konstante)
print
[static]
der Wert von mask, der die Klassifizierung von druckbaren Zeichen kennzeichnet
(öffentliche statische Member-Konstante)
cntrl
[static]
der Wert von mask, der die Klassifizierung von Steuerzeichen kennzeichnet
(öffentliche statische Member-Konstante)
upper
[static]
der Wert von mask, der die Klassifizierung von Großbuchstaben kennzeichnet
(öffentliche statische Member-Konstante)
lower
[static]
der Wert von mask, der die Klassifizierung von Kleinbuchstaben kennzeichnet
(öffentliche statische Member-Konstante)
alpha
[static]
der Wert von mask, der die Klassifizierung von alphabetischen Zeichen kennzeichnet
(öffentliche statische Member-Konstante)
Ziffer
[static]
der Wert von mask, der die Klassifizierung von Ziffern kennzeichnet
(öffentliche statische Member-Konstante)
punct
[static]
der Wert von mask, der die Klassifizierung von Satzzeichen kennzeichnet
(öffentliche statische Member-Konstante)
xdigit
[static]
der Wert von mask, der die Klassifizierung von Hexadezimalziffern kennzeichnet
(öffentliche statische Member-Konstante)
blank
[statisch] (C++11)
der Wert von mask, der die Klassifizierung von Leerzeichen (Blank) kennzeichnet
(öffentliche statische Member-Konstante)
alnum
[static]
alpha | digit
(öffentliche statische Member-Konstante)
graph
[static]
alnum | punct
(öffentliche statische Member-Konstante)

[bearbeiten] Beispiel

Das folgende Beispiel demonstriert die Modifikation von ctype<char> zur Tokenisierung von durch Kommas getrennten Werten

#include <cstddef>
#include <iostream>
#include <locale>
#include <sstream>
#include <vector>
 
// This ctype facet classifies commas and endlines as whitespace
struct csv_whitespace : std::ctype<char>
{
    static const mask* make_table()
    {
        // make a copy of the "C" locale table
        static std::vector<mask> v(classic_table(), classic_table() + table_size);
        v[','] |=  space; // comma will be classified as whitespace
        v[' '] &= ~space; // space will not be classified as whitespace
        return &v[0];
    }
 
    csv_whitespace(std::size_t refs = 0) : ctype(make_table(), false, refs) {}
};
 
int main()
{
    std::string in = "Column 1,Column 2,Column 3\n123,456,789";
    std::string token;
 
    std::cout << "Default locale:\n";
    std::istringstream s1(in);
    while (s1 >> token)
        std::cout << "  " << token << '\n';
 
    std::cout << "Locale with modified ctype:\n";
    std::istringstream s2(in);
    s2.imbue(std::locale(s2.getloc(), new csv_whitespace));
    while (s2 >> token)
        std::cout << "  " << token << '\n';
}

Ausgabe

Default locale:
  Column
  1,Column
  2,Column
  3
  123,456,789
Locale with modified ctype:
  Column 1
  Column 2
  Column 3
  123
  456
  789

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 695 C++98 table() und classic_table() waren geschützte Memberfunktionen sie wurden öffentlich gemacht

[bearbeiten] Siehe auch

definiert Zeichenklassifizierungstabellen
(Klassentemplate) [bearbeiten]
definiert Zeichenklassifizierungskategorien
(Klasse) [bearbeiten]
repräsentiert die systemseitige std::ctype für die benannte Locale
(Klassentemplate) [bearbeiten]