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 |
Элементы данных
| Элемент | Описание |
|---|---|
std::locale::id id [static] | идентификатор аспекта |
conststd::size_t table_size [static] | размер таблицы классификации, не менее 256 |
Функции-члены
| создаёт новый аспект ctype<char> (открытая функция-член) |
|
| уничтожает аспект ctype<char> (защищённая функция-член) |
|
| получает таблицу классификации символов (открытая функция-член) |
|
|
[static] | получает таблицу классификации символов локали "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 (перечисление, целочисленный тип или битовая маска) |
Константы-члены
|
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() были защищёнными функциями-членами | сделаны открытыми |
См. также
| определяет таблицы классификации символов (шаблон класса) |
|
| определяет категории классификации символов (класс) |
|
представляет предоставляемый системой std::ctype для локали с заданным именем (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/ctype_char