std::ctype(3) | C++ Standard Libary | std::ctype(3) |
NAME¶
std::ctype - std::ctype
Synopsis¶
Defined in header <locale>
template<>
class ctype<char>;
This specialization of std::ctype encapsulates character classification
features for
type char. Unlike general-purpose std::ctype, which uses virtual functions,
this
specialization uses table lookup to classify characters (which is generally
faster).
The base class std::ctype<char> implements character classification
equivalent to
the minimal "C" locale. The classification rules can be extended or
modified if
constructed with a non-default classification table argument, if constructed
as
std::ctype_byname<char> or as a user-defined derived facet. All
std::istream
formatted input functions are required to use std::ctype<char> for
character
classing during input parsing.
std-ctype char-inheritance.svg
Inheritance diagram
Member types¶
Member type Definition
char_type char
Member functions¶
constructor constructs a new std::ctype<char> facet
(public member function)
destructor destructs a std::ctype<char> facet
(protected member function)
table obtains the character classification table
(public member function)
classic_table obtains the "C" locale character classification table
[static] (public static member function)
classifies a character or a character sequence, using the
is classification table
(public member function)
locates the first character in a sequence that conforms to given
scan_is classification, using the classification table
(public member function)
locates the first character in a sequence that fails given
scan_not classification, using the classification table
(public member function)
toupper invokes do_toupper
(public member function of std::ctype<CharT>)
tolower invokes do_tolower
(public member function of std::ctype<CharT>)
widen invokes do_widen
(public member function of std::ctype<CharT>)
narrow invokes do_narrow
(public member function of std::ctype<CharT>)
Protected member functions¶
do_toupper converts a character or characters to uppercase
[virtual] (virtual protected member function of
std::ctype<CharT>)
do_tolower converts a character or characters to lowercase
[virtual] (virtual protected member function of
std::ctype<CharT>)
do_widen converts a character or characters from char to charT
[virtual] (virtual protected member function of
std::ctype<CharT>)
do_narrow converts a character or characters from charT to char
[virtual] (virtual protected member function of
std::ctype<CharT>)
Member objects¶
static std::locale::id id id of the locale
[static] (public static member constant)
static const std::size_t table_size size of the classification table, at
least 256
[static] (public static member constant)
Inherited from std::ctype_base
Member types¶
Type Definition
mask unspecified bitmask type (enumeration, integer type, or bitset)
Member constants¶
space the value of mask identifying whitespace character
classification
[static] (public static member constant)
print the value of mask identifying printable character classification
[static] (public static member constant)
cntrl the value of mask identifying control character classification
[static] (public static member constant)
upper the value of mask identifying uppercase character classification
[static] (public static member constant)
lower the value of mask identifying lowercase character classification
[static] (public static member constant)
alpha the value of mask identifying alphabetic character classification
[static] (public static member constant)
digit the value of mask identifying digit character classification
[static] (public static member constant)
punct the value of mask identifying punctuation character classification
[static] (public static member constant)
xdigit the value of mask identifying hexadecimal digit character
[static] classification
(public static member constant)
blank the value of mask identifying blank character classification
[static] (C++11) (public static member constant)
alnum alpha | digit
[static] (public static member constant)
graph alnum | punct
[static] (public static member constant)
Example¶
The following example demonstrates modification of
ctype<char> to tokenize
comma-separated values
// Run this code
#include <iostream>
#include <vector>
#include <locale>
#include <sstream>
// 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';
}
Output:¶
default locale:
Column
1,Column
2,Column
3
123,456,789
locale with modified ctype:
Column 1
Column 2
Column 3
123
456
789
See also¶
ctype defines character classification tables
(class template)
ctype_base defines character classification categories
(class template)
ctype_byname creates a ctype facet for the named locale
(class template)
2022.07.31 | http://cppreference.com |