std::ctype
Определён в заголовочном файле <locale> | ||
|---|---|---|
template< class CharT > class ctype; |
Класс ctype инкапсулирует функции классификации символов. Все операции ввода из потока, выполняемые через std::basic_istream<CharT>, используют std::ctype<CharT> локали, назначенной потоку, для определения символов-разделителей при разбиении ввода на токены. Операции вывода в поток применяют std::ctype<CharT>::widen() к аргументам типа узкого символа перед выводом.
Диаграмма наследования
Специализации
Стандартная библиотека гарантированно предоставляет следующие специализации (они должны быть реализованы любым объектом локали):
Определена в заголовочном файле <locale> |
|
|---|---|
std::ctype<char> | предоставляет эквиваленты минимальной классификации символов локали «C» для узких символов. Эта специализация использует поиск по таблице для классификации символов |
| std::ctype<wchar_t> | предоставляет классификацию широких символов, соответствующую исходному набору символов |
Вложенные типы
| Тип | Определение |
|---|---|
char_type |
CharT |
Данные-члены
| Член | Описание |
|---|---|
std::locale::id id [static] | идентификатор фасета |
Функции-члены
создаёт новый фасет ctype (открытая функция-член) |
|
уничтожает фасет ctype (защищённая функция-член) |
|
вызывает do_is (открытая функция-член) |
|
вызывает do_scan_is (открытая функция-член) |
|
вызывает do_scan_not (открытая функция-член) |
|
вызывает do_toupper (открытая функция-член) |
|
вызывает do_tolower (открытая функция-член) |
|
вызывает do_widen (открытая функция-член) |
|
вызывает do_narrow (открытая функция-член) |
Защищённые функции-члены
|
[virtual] | классифицирует символ или последовательность символов (виртуальная защищённая функция-член) |
|
[virtual] | находит первый символ в последовательности, соответствующий заданной классификации (виртуальная защищённая функция-член) |
|
[virtual] | находит первый символ в последовательности, не соответствующий заданной классификации (виртуальная защищённая функция-член) |
|
[virtual] | преобразует символ или символы в верхний регистр (виртуальная защищённая функция-член) |
|
[virtual] | преобразует символ или символы в нижний регистр (виртуальная защищённая функция-член) |
|
[virtual] | преобразует символ или символы из char в CharT (виртуальная защищённая функция-член) |
|
[virtual] | преобразует символ или символы из CharT в char (виртуальная защищённая функция-член) |
Унаследовано от 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, отличного от ctype<char>, для разбиения CSV-файла на токены:
#include <iostream>
#include <locale>
#include <sstream>
struct csv_whitespace : std::ctype<wchar_t>
{
bool do_is(mask m, char_type c) const
{
if ((m & space) && c == L' ')
return false; // space will NOT be classified as whitespace
if ((m & space) && c == L',')
return true; // comma will be classified as whitespace
return ctype::do_is(m, c); // leave the rest to the base class
}
};
int main()
{
std::wstring in = L"Column 1,Column 2,Column 3\n123,456,789";
std::wstring token;
std::wcout << "default locale:\n";
std::wistringstream s1(in);
while (s1 >> token)
std::wcout << " " << token << '\n';
std::wcout << "locale with modified ctype:\n";
std::wistringstream s2(in);
csv_whitespace* my_ws = new csv_whitespace;
s2.imbue(std::locale(s2.getloc(), my_ws));
while (s2 >> token)
std::wcout << " " << 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
См. также
специализация std::ctype для типа char (специализация шаблона класса) |
|
| определяет категории классификации символов (класс) |
|
представляет предоставляемый системой std::ctype для именованной локали (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/ctype