std::ctype<char>
| 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.
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) | |
| zerstört ein ctype<char>-Facet (protected member function) | |
| ruft die Zeichenklassifizierungstabelle ab (public member function) | |
| [static] |
ruft die Zeichenklassifizierungstabelle der "C"-Locale ab (public static member function) |
| klassifiziert ein Zeichen oder eine Zeichensequenz unter Verwendung der Klassifizierungstabelle (public member function) | |
| findet das erste Zeichen in einer Sequenz, das der gegebenen Klassifizierung entspricht, unter Verwendung der Klassifizierungstabelle (public member function) | |
| findet das erste Zeichen in einer Sequenz, das die gegebene Klassifizierung nicht erfüllt, unter Verwendung der Klassifizierungstabelle (public member function) | |
ruft do_toupper auf(public member function of std::ctype<CharT>) | |
ruft do_tolower auf(public member function of std::ctype<CharT>) | |
ruft do_widen auf(public member function of std::ctype<CharT>) | |
ruft do_narrow auf(public member function of std::ctype<CharT>) |
[bearbeiten] Geschützte Memberfunktionen
| [virtuell] |
konvertiert ein Zeichen oder Zeichen in Großbuchstaben (virtual protected member function of std::ctype<CharT>) |
| [virtuell] |
konvertiert ein Zeichen oder Zeichen in Kleinbuchstaben (virtual protected member function of std::ctype<CharT>) |
| [virtuell] |
konvertiert ein Zeichen oder Zeichen von char zu CharT(virtual protected member function of std::ctype<CharT>) |
| [virtuell] |
konvertiert ein Zeichen oder Zeichen von CharT zu char(virtual protected member function of std::ctype<CharT>) |
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) | |
| definiert Zeichenklassifizierungskategorien (Klasse) | |
| repräsentiert die systemseitige std::ctype für die benannte Locale (Klassentemplate) |