Namespaces
Variants

std:: ctype <char>

From cppreference.net
Определено в заголовочном файле <locale>
template <>
class ctype < char > ;

Эта специализация std::ctype инкапсулирует функции классификации символов для типа char . В отличие от универсального std::ctype , который использует виртуальные функции, эта специализация использует табличный поиск для классификации символов (что обычно быстрее).

Базовый класс std::ctype < char > реализует классификацию символов, эквивалентную минимальной локали "C". Правила классификации могут быть расширены или изменены при создании с аргументом нестандартной таблицы классификации, при создании как std:: ctype_byname < char > или как пользовательский производный фасет. Все функции форматированного ввода std::istream обязаны использовать std::ctype < char > для классификации символов во время разбора ввода.

cpp/locale/ctype base cpp/locale/locale/facet std-ctype char-inheritance.svg

Диаграмма наследования

Содержание

Вложенные типы

Тип Определение
char_type char

Члены данных

Участник Описание
std::locale::id id [static] идентификатор аспекта
const std:: size_t table_size [static] размер таблицы классификации, не менее 256

Функции-члены

создает новый ctype < char > аспект
(публичная функция-член)
уничтожает ctype < char > аспект
(защищенная функция-член)
получает таблицу классификации символов
(публичная функция-член)
получает таблицу классификации символов локали "C"
(публичная статическая функция-член)
классифицирует символ или последовательность символов, используя таблицу классификации
(публичная функция-член)
находит первый символ в последовательности, соответствующий заданной классификации, используя таблицу классификации
(публичная функция-член)
находит первый символ в последовательности, не соответствующий заданной классификации, используя таблицу классификации
(публичная функция-член)
вызывает do_toupper
(публичная функция-член std::ctype<CharT> )
вызывает do_tolower
(публичная функция-член std::ctype<CharT> )
вызывает do_widen
(публичная функция-член std::ctype<CharT> )
вызывает do_narrow
(публичная функция-член std::ctype<CharT> )

Защищенные функции-члены

[virtual]
преобразует символ или символы в верхний регистр
(виртуальная защищенная функция-член std::ctype<CharT> )
[virtual]
преобразует символ или символы в нижний регистр
(виртуальная защищенная функция-член std::ctype<CharT> )
[virtual]
преобразует символ или символы из char в CharT
(виртуальная защищенная функция-член std::ctype<CharT> )
[virtual]
преобразует символ или символы из CharT в char
(виртуальная защищенная функция-член std::ctype<CharT> )

Унаследовано от std:: ctype_base

Вложенные типы

Тип Определение
mask неуказанный BitmaskType тип (перечисление, целочисленный тип или bitset)

Константы-члены

space
[static]
значение mask идентифицирующее классификацию пробельных символов
(публичная статическая константа-член)
print
[static]
значение mask идентифицирующее классификацию печатаемых символов
(публичная статическая константа-член)
cntrl
[static]
значение mask идентифицирующее классификацию управляющих символов
(публичная статическая константа-член)
upper
[static]
значение mask идентифицирующее классификацию символов верхнего регистра
(публичная статическая константа-член)
lower
[static]
значение mask идентифицирующее классификацию символов нижнего регистра
(публичная статическая константа-член)
alpha
[static]
значение mask идентифицирующее классификацию алфавитных символов
(публичная статическая константа-член)
digit
[static]
значение mask идентифицирующее классификацию цифровых символов
(публичная статическая константа-член)
punct
[static]
значение mask идентифицирующее классификацию символов пунктуации
(публичная статическая константа-член)
xdigit
[static]
значение mask идентифицирующее классификацию шестнадцатеричных цифр
(публичная статическая константа-член)
blank
[static] (C++11)
значение mask идентифицирующее классификацию пробельных символов (blank)
(публичная статическая константа-член)
alnum
[static]
alpha | digit
(публичная статическая константа-член)
graph
[static]
alnum | punct
(публичная статическая константа-член)

Пример

Следующий пример демонстрирует модификацию ctype < char > для токенизации значений, разделенных запятыми:

#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';
}

Вывод:

Default locale:
  Column
  1,Column
  2,Column
  3
  123,456,789
Locale with modified ctype:
  Column 1
  Column 2
  Column 3
  123
  456
  789

Отчёты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 695 C++98 table() и classic_table() были защищёнными функциями-членами сделаны публичными

Смотрите также

определяет таблицы классификации символов
(шаблон класса)
определяет категории классификации символов
(класс)
представляет предоставляемую системой std::ctype для именованной локали
(шаблон класса)