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 |
Функции-члены
создаёт новый объект класса ctype (публичная функция-член) |
|
уничтожает объект класса ctype (защищённая функция-член) |
|
вызывает do_is (публичная функция-член) |
|
вызывает do_scan_is (публичная функция-член) |
|
вызывает do_scan_not (публичная функция-член) |
|
вызывает do_toupper (публичная функция-член) |
|
вызывает do_tolower (публичная функция-член) |
|
вызывает do_widen (публичная функция-член) |
|
вызывает do_narrow (публичная функция-член) |
Объекты-члены
| static std::locale::id id | id локаля (публичный объект-член) |
Защищённые функции-члены
|
[виртуальная] | классифицирует символ или последовательность символов (виртуальная защищённая функция-член) |
|
[виртуальная] | находит первый символ в последовательности, соответствующий заданной классификации (виртуальная защищённая функция-член) |
|
[виртуальная] | находит первый символ в последовательности, не соответствующий заданной классификации (виртуальная защищённая функция-член) |
|
[виртуальная] | преобразует символ или последовательность символов в верхний регистр (виртуальная защищённая функция-член) |
|
[виртуальная] | преобразует символ или последовательность символов в нижний регистр (виртуальная защищённая функция-член) |
|
[виртуальная] | преобразует символ или последовательность символов из типа char в wchar_t (виртуальная защищённая функция-член) |
|
[виртуальная] | преобразует символ или последовательность символов из типа wchar_t в char (виртуальная защищённая функция-член) |
Наследуется от 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 кроме 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/w/cpp/locale/ctype