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)