std::ctype

From cppreference.com
< cpp‎ | locale
 
 
Localizations library
Locales and facets
Locales
Facet category base classes
ctype facets
numeric facets
collate facets
time facets
monetary facets
messages facets
Character classification and conversion
Character classification
Conversions
(C++11/17*)
(C++11/17*)
Code conversion facets
(C++11/17*)
(C++11/17*)    
(C++11/17*)
C locale
 
 
Defined in header <locale>
template< class CharT >
class ctype;

Class ctype encapsulates character classification features. All stream input operations performed through std::basic_istream<CharT> use the std::ctype<CharT> of the locale imbued in the stream to identify whitespace characters for input tokenization. Stream output operations apply std::ctype<CharT>::widen() to narrow-character arguments prior to output.

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

Inheritance diagram

Specializations

The standard library is guaranteed to provide the following specializations (they are required to be implemented by any locale object):

Defined in header <locale>
std::ctype<char> provides narrow character equivalents of the minimal "C" locale classification. This specialization uses table lookup for character classification
std::ctype<wchar_t> provides wide character classification appropriate to the native character set

Member types

Member type Definition
char_type CharT

Member functions

constructs a new ctype facet
(public member function)
destructs a ctype facet
(protected member function)
invokes do_is
(public member function)
invokes do_scan_is
(public member function)
invokes do_scan_not
(public member function)
invokes do_toupper
(public member function)
invokes do_tolower
(public member function)
invokes do_widen
(public member function)
invokes do_narrow
(public member function)

Member objects

static std::locale::id id
id of the locale
(public member object)

Protected member functions

[virtual]
classifies a character or a character sequence
(virtual protected member function)
[virtual]
locates the first character in a sequence that conforms to given classification
(virtual protected member function)
[virtual]
locates the first character in a sequence that fails given classification
(virtual protected member function)
[virtual]
converts a character or characters to uppercase
(virtual protected member function)
[virtual]
converts a character or characters to lowercase
(virtual protected member function)
[virtual]
converts a character or characters from char to CharT
(virtual protected member function)
[virtual]
converts a character or characters from CharT to char
(virtual protected member function)

Inherited from std::ctype_base

Member types

Type Definition
mask unspecified bitmask type (enumeration, integer type, or bitset)

Member constants

space
[static]
the value of mask identifying whitespace character classification
(public static member constant)
print
[static]
the value of mask identifying printable character classification
(public static member constant)
cntrl
[static]
the value of mask identifying control character classification
(public static member constant)
upper
[static]
the value of mask identifying uppercase character classification
(public static member constant)
lower
[static]
the value of mask identifying lowercase character classification
(public static member constant)
alpha
[static]
the value of mask identifying alphabetic character classification
(public static member constant)
digit
[static]
the value of mask identifying digit character classification
(public static member constant)
punct
[static]
the value of mask identifying punctuation character classification
(public static member constant)
xdigit
[static]
the value of mask identifying hexadecimal digit character classification
(public static member constant)
blank
[static] (C++11)
the value of mask identifying blank character classification
(public static member constant)
alnum
[static]
alpha | digit
(public static member constant)
graph
[static]
alnum | punct
(public static member constant)

Example

The following example demonstrates modification of a ctype other than ctype<char> to tokenize a CSV file:

#include <iostream>
#include <locale>
#include <sstream>
 
struct csv_whitespace : std::ctype<wchar_t>
{
    bool do_is(mask m, char_type c) const
    {
        if ((m & space) && c == L' ')
            return false; // space will NOT be classified as whitespace
 
        if ((m & space) && c == L',')
            return true; // comma will be classified as whitespace
 
        return ctype::do_is(m, c); // leave the rest to the base class
    }
};
 
int main()
{
    std::wstring in = L"Column 1,Column 2,Column 3\n123,456,789";
    std::wstring token;
 
    std::wcout << "default locale:\n";
    std::wistringstream s1(in);
    while (s1 >> token)
        std::wcout << "  " << token << '\n';
 
    std::wcout << "locale with modified ctype:\n";
    std::wistringstream s2(in);
    csv_whitespace* my_ws = new csv_whitespace;
    s2.imbue(std::locale(s2.getloc(), my_ws));
    while (s2 >> token)
        std::wcout << "  " << 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

specialization of std::ctype for type char
(class template specialization)
defines character classification categories
(class)
represents the system-supplied std::ctype for the named locale
(class template)