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> для классификации символов при разборе входных данных.
Диаграмма наследования
Типы членов
| Тип члена | Определение |
|---|---|
char_type | char |
Члены-функции
| создаёт новый фрагмент 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> ) |
Защищённые члены-функции
|
[виртуальный] | преобразует символ или символы в верхний регистр (виртуальная защищённая функция-член std::ctype<CharT> ) |
|
[виртуальный] | преобразует символ или символы в нижний регистр (виртуальная защищённая функция-член std::ctype<CharT> ) |
|
[виртуальный] | преобразует символ или символы из char в CharT (виртуальная защищённая функция-член std::ctype<CharT> ) |
|
[виртуальный] | преобразует символ или символы из 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() были защищёнными членами | сделаны общедоступными |
См. также
| определяет таблицы классификации символов (шаблон класса) |
|
| определяет категории классификации символов (класс) |
|
представляет предоставимые системой std::ctype для заданного региона (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/ctype_char