Spec-Zone.ru › C++

std::ctype<char>

Определено в заголовке <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/facetstd-ctype char-inheritance.svg

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

Типы членов

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

Члены-функции

(конструктор)
создаёт новый фрагмент ctype<char>
(публичная функция-член)
(деструктор)
уничтожает фрагмент ctype<char>
(защищённая функция-член)
table
получает таблицу классификации символов
(публичная функция-член)
classic_table
[статический]
получает таблицу классификации символов локали "C"
(публичная статическая функция-член)
is
классифицирует символ или последовательность символов, используя таблицу классификации
(публичная функция-член)
scan_is
находит первый символ в последовательности, соответствующий заданной классификации, используя таблицу классификации
(публичная функция-член)
scan_not
находит первый символ в последовательности, не соответствующий заданной классификации, используя таблицу классификации
(публичная функция-член)
toupper
вызывает do_toupper
(публичная функция-член std::ctype<CharT> )
tolower
вызывает do_tolower
(публичная функция-член std::ctype<CharT> )
widen
вызывает do_widen
(публичная функция-член std::ctype<CharT> )
narrow
вызывает do_narrow
(публичная функция-член std::ctype<CharT> )

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

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

Объекты-члены

static std::locale::id id
[статический]
id локали
(публичная статическая константа-член)
static const std::size_t table_size
[статический]
размер таблицы классификации, по крайней мере 256
(публичная статическая константа-член)

Наследуется от std::ctype_base

Типы членов

Тип Определение
mask неопределённый тип битовой маски (перечисление, целочисленный тип или битовая настройка)

Постоянные члены

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, определяющее классификацию символов пробела
(общедоступная статическая константа-член)
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 Применено к Поведение при публикации Правильное поведение
LWG 695 C++98 table() и classic_table() были защищёнными членами сделаны общедоступными

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/ctype_char

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API