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/facet

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

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

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

Элементы данных

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

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

(constructor)
создаёт новый аспект ctype<char>
(открытая функция-член)
(destructor)
уничтожает аспект ctype<char>
(защищённая функция-член)
table
получает таблицу классификации символов
(открытая функция-член)
classic_table
[static]
получает таблицу классификации символов локали "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
[virtual]
преобразует символ или символы в верхний регистр
(виртуальная защищённая функция-член класса std::ctype<CharT>)
do_tolower
[virtual]
преобразует символ или символы в нижний регистр
(виртуальная защищённая функция-член класса std::ctype<CharT>)
do_widen
[virtual]
преобразует символ или символы из char в CharT
(виртуальная защищённая функция-член класса std::ctype<CharT>)
do_narrow
[virtual]
преобразует символ или символы из CharT в char
(виртуальная защищённая функция-член класса std::ctype<CharT>)

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

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

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

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

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++.

Отчёт об ошибке Применён к Опубликованное поведение Исправленное поведение
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/cpp/locale/ctype_char

Spec-Zone.ru

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