Scroll to navigation

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