Класс ctype
Класс, предоставляющий аспект, используемый для классификации символов, преобразования из верхнего и нижнего регистра, а также преобразования между собственной кодировкой и кодировкой, используемой языковым стандартом.
Синтаксис
template <class CharType>
class ctype : public ctype_base;
Параметры
CharType
Тип, используемый внутри программы для кодирования символов.
Замечания
Как и в случае любого другого аспекта языкового стандарта, начальное сохраненное значение статического идентификатора объекта равно нулю. Первая попытка получить доступ к сохраненному значению сохранит уникальное положительное значение в id
. Критерии классификации получают вложенный тип битовой маски в базовом классе ctype_base.
Стандартная библиотека C++ определяет две явные специализации этого шаблона класса:
ctype<char>
, явная специализация, различия которой описаны отдельно. Дополнительные сведения см. в разделеctype<char>
"Класс".ctype<wchar_t>
, который обрабатывает элементы как широкие символы.
Другие специализации шаблона ctype<CharType>
класса:
Преобразуйте число значений типа CharType в значение типа
char
с выражением(char)ch
.Преобразуйте байт значения типа
char
в значение типа CharType с выражениемCharType(byte)
.
Все остальные операции выполняются так char
же, как и для явной специализации ctype<char>
.
Конструкторы
Конструктор | Description |
---|---|
ctype | Конструктор для объектов класса ctype , которые служат в качестве аспектов языкового стандарта для символов. |
Определения типов
Введите имя | Description |
---|---|
char_type | Тип, который описывает символ, используемый языковым стандартом. |
Функции элементов
Функция-член | Description |
---|---|
do_is | Виртуальная функция, вызываемая для проверки того, есть ли у отдельного символа определенный атрибут, или для классификации атрибутов каждого символа в диапазоне и сохранения их в массиве. |
do_narrow | Виртуальная функция, вызываемая для преобразования символа типа CharType , используемого языковым стандартом, в соответствующий символ типа char в собственной кодировке. |
do_scan_is | Виртуальная функция, вызываемая для обнаружения первого символа, соответствующего указанной маске, в диапазоне. |
do_scan_not | Виртуальная функция, вызываемая для обнаружения первого символа, не соответствующего указанной маске, в диапазоне. |
do_tolower | Виртуальная функция, вызываемая для преобразования символа или диапазона символов в нижний регистр. |
do_toupper | Виртуальная функция, вызываемая для преобразования символа или диапазона символов в верхний регистр. |
do_widen | Виртуальная функция, вызываемая для преобразования символа типа char в исходной кодировке в соответствующий символ типа CharType , используемый языковым стандартом. |
is | Проверяет, есть ли у отдельного символа определенный атрибут, или классифицирует атрибуты каждого символа в диапазоне и сохраняет их в массиве. |
narrow | Преобразовывает символ типа CharType , используемый языковым стандартом, в соответствующий символ типа char в исходной кодировке. |
scan_is | Обнаруживает первый символ, соответствующий указанной маске, в диапазоне. |
scan_not | Обнаруживает первый символ, несоответствующий указанной маске, в диапазоне. |
tolower | Преобразует символ или диапазон символов в нижний регистр. |
toupper | Преобразует символ или диапазон символов в верхний регистр. |
widen | Преобразовывает символ типа char в исходной кодировке в соответствующий символ типа CharType , используемый языковым стандартом. |
Требования
Заголовок:<языковой стандарт>
Пространство имен: std
ctype::char_type
Тип, который описывает символ, используемый языковым стандартом.
typedef CharType char_type;
Замечания
Тип является синонимом для параметра-шаблона CharType.
Пример
Пример, в котором char_type
используется в качестве возвращаемого значения, см. в описании функции-члена widen.
ctype::ctype
Конструктор для объектов класса ctype, которые служат в качестве аспектов языкового стандарта для символов.
explicit ctype(size_t _Refs = 0);
Параметры
_Refs
Целочисленное значение, используемое для указания типа управления памятью для объекта.
Замечания
Возможные значения параметра _Refs и их значение:
0: время существования объекта управляется языковыми стандартами, которые его содержат.
1: время существования объекта должно управляться вручную.
> 1. Эти значения не определены.
Прямые примеры привести нельзя, так как деструктор защищен.
Конструктор инициализирует свой базовый объект locale::facet
с locale::facet(_Refs
).
ctype::d o_is
Виртуальная функция, вызываемая для проверки того, есть ли у отдельного символа определенный атрибут, или для классификации атрибутов каждого символа в диапазоне и сохранения их в массиве.
virtual bool do_is(
mask maskVal,
CharType ch) const;
virtual const CharType *do_is(
const CharType* first,
const CharType* last,
mask* dest) const;
Параметры
maskVal
Значение маски, для которого должен тестироваться символ.
ch
Символ, атрибуты которого должны тестироваться.
first
Указатель на первый символ в диапазоне, атрибуты которого должны классифицироваться.
last
Указатель на символ, следующий сразу за последним символом в диапазоне, атрибуты которого должны классифицироваться.
dest
Указатель на начало массива, где должны храниться значения маски, характеризующие атрибуты каждого из символов.
Возвращаемое значение
Первая функция-член возвращает логическое значение, которое определяется true
, если символ, тестируемый, имеет атрибут, описанный значением маски; false
если он не имеет атрибута.
Вторая функция-член возвращает массив, содержащий значения маски, характеризующие атрибуты каждого символа в диапазоне.
Замечания
Значения маски, классифицирующие атрибуты символов, предоставляются классом ctype_base, от которого производится класс ctype. Первая функция-член может принимать выражения для своего первого параметра, называемого битовой маской и сформированной из сочетания значений маски по битовой операторы (|
, &
, , ^
~
).
Пример
См. пример для is, в котором вызывается do_is
.
ctype::d o_narrow
Виртуальная функция, вызываемая для преобразования символа типа CharType
, используемого языковым стандартом, в соответствующий символ типа char
в собственной кодировке.
virtual char do_narrow(
CharType ch,
char default = '\0') const;
virtual const CharType* do_narrow(
const CharType* first,
const CharType* last,
char default,
char* dest) const;
Параметры
ch
Символ типа Chartype
, используемого языковым стандартом, который требуется преобразовать.
default
Значение по умолчанию, которое должно назначаться функцией-членом символам типа CharType
, не имеющим эквивалентных символов типа char
.
first
Указатель на первый символ в диапазоне символов для преобразования.
last
Указатель на символ, следующий сразу за последним символом в преобразуемом диапазоне символов.
dest
Константный указатель на первый символ типа char
в целевом диапазоне, который хранит преобразуемый диапазон символов.
Возвращаемое значение
Первая защищенная функция-член возвращает собственный символ типа char, соответствующий символу параметра типа CharType
или по умолчанию , если нет определенного аналога.
Вторая защищенная функция-член возвращает указатель на целевой диапазон собственных символов, преобразованных из символов типа CharType
.
Замечания
Вторая защищенная функция шаблона-члена хранится в dest
[ ] значение do_narrow
( first
[ I
], default
), для I
интервала [0,first
last
- ). I
Пример
См. пример для narrow, в котором вызывается do_narrow
.
ctype::d o_scan_is
Виртуальная функция, вызываемая для обнаружения первого символа, соответствующего указанной маске, в диапазоне.
virtual const CharType *do_scan_is(
mask maskVal,
const CharType* first,
const CharType* last) const;
Параметры
maskVal
Значение маски для сопоставления с символом.
first
Указатель на первый символ в просматриваемом диапазоне символов.
last
Указатель на символ, следующий сразу за последним символом в просматриваемом диапазоне.
Возвращаемое значение
Указатель на первый символ в диапазоне, соответствующий указанной маске. Если такое значение не существует, функция возвращает последнее значение.
Замечания
Защищенная функция-член возвращает наименьший указатель ptr
в диапазоне [first
, last
), для которого do_is(maskVal
, * ptr
) имеет значение true.
Пример
См. пример для scan_is, в котором вызывается do_scan_is
.
ctype::d o_scan_not
Виртуальная функция, вызываемая для обнаружения первого символа, не соответствующего указанной маске, в диапазоне.
virtual const CharType *do_scan_not(
mask maskVal,
const CharType* first,
const CharType* last) const;
Параметры
maskVal
Значение маски, которому не должен соответствовать символ.
first
Указатель на первый символ в просматриваемом диапазоне символов.
last
Указатель на символ, следующий сразу за последним символом в просматриваемом диапазоне.
Возвращаемое значение
Указатель на первый символ в диапазоне, не соответствующий указанной маске. Если такое значение не существует, функция возвращает последнее значение.
Замечания
Защищенная функция-член возвращает наименьший указатель ptr
в диапазоне [first
, last
), для которого do_is(maskVal
, * ptr
) имеет значение false.
Пример
См. пример для scan_not, в котором вызывается do_scan_not
.
ctype::d o_tolower
Виртуальная функция, вызываемая для преобразования символа или диапазона символов в нижний регистр.
virtual CharType do_tolower(CharType ch) const;
virtual const CharType *do_tolower(
CharType* first,
const CharType* last) const;
Параметры
ch
Символ для преобразования в нижний регистр.
first
Указатель на первый символ в диапазоне символов, регистр которых нужно преобразовать.
last
Указатель на символ, следующий сразу за последним символом в диапазоне, регистр символов которого нужно преобразовать.
Возвращаемое значение
Первая защищенная функция-член возвращает строчную форму параметра ch. Если нижная форма не существует, она возвращает ch. Вторая защищенная функция-член возвращается последнее.
Замечания
Вторая защищенная функция шаблона-члена заменяет каждый элемент first
[ I
], для I
интервала [0, last
first
- ), с do_tolower
( first
[ I
]).
Пример
См. пример для tolower, в котором вызывается do_tolower
.
ctype::d o_toupper
Виртуальная функция, вызываемая для преобразования символа или диапазона символов в верхний регистр.
virtual CharType do_toupper(CharType ch) const;
virtual const CharType *do_toupper(
CharType* first,
const CharType* last) const;
Параметры
ch
Символ для преобразования в верхний регистр.
first
Указатель на первый символ в диапазоне символов, регистр которых нужно преобразовать.
last
Указатель на символ, следующий сразу за последним символом в диапазоне, регистр символов которого нужно преобразовать.
Возвращаемое значение
Первая защищенная функция-член возвращает прописную форму параметра ch. Если форма верхнего регистра не существует, она возвращает ch. Вторая защищенная функция-член возвращается последнее.
Замечания
Вторая защищенная функция шаблона-члена заменяет каждый элемент first
[ I
], для I
интервала [0, last
first
- ), с do_toupper
( first
[ I
]).
Пример
См. пример для toupper, в котором вызывается do_toupper
.
ctype::d o_widen
Виртуальная функция, вызываемая для преобразования символа типа char
в исходной кодировке в соответствующий символ типа CharType
, используемый языковым стандартом.
virtual CharType do_widen(char byte) const;
virtual const char *do_widen(
const char* first,
const char* last,
CharType* dest) const;
Параметры
byte
Символ типа char
в исходной кодировке для преобразования.
first
Указатель на первый символ в диапазоне символов для преобразования.
last
Указатель на символ, следующий сразу за последним символом в преобразуемом диапазоне символов.
dest
Указатель на первый символ типа CharType
в целевом диапазоне, который хранит преобразуемый диапазон символов.
Возвращаемое значение
Первая защищенная функция-член возвращает символ типа CharType
, соответствующий символу параметра исходного типа char
.
Вторая защищенная функция-член возвращает указатель на целевой диапазон символов типа CharType
, используемого языковым стандартом, преобразованных из исходных символов типа char
.
Замечания
Вторая защищенная функция-член шаблона сохраняет в dest
[I
] значение do_widen
(first
[I
]) для I
в диапазоне [0, last
- first
).
Пример
См. пример для widen, в котором вызывается do_widen
.
ctype::is
Проверяет, есть ли у отдельного символа определенный атрибут, или классифицирует атрибуты каждого символа в диапазоне и сохраняет их в массиве.
bool is(mask maskVal, CharType ch) const;
const CharType *is(
const CharType* first,
const CharType* last,
mask* dest) const;
Параметры
maskVal
Значение маски, для которого должен тестироваться символ.
ch
Символ, атрибуты которого должны тестироваться.
first
Указатель на первый символ в диапазоне, атрибуты которого должны классифицироваться.
last
Указатель на символ, следующий сразу за последним символом в диапазоне, атрибуты которого должны классифицироваться.
dest
Указатель на начало массива, где должны храниться значения маски, характеризующие атрибуты каждого из символов.
Возвращаемое значение
Первая функция-член возвращает значение true
, если протестированный символ имеет атрибут, описываемый значением маски, или значение false
, если такой атрибут не удалось найти.
Вторая функция-член возвращает указатель на последний символ в диапазоне, атрибуты которого должны классифицироваться.
Замечания
Значения маски, классифицирующие атрибуты символов, предоставляются классом ctype_base, от которого производится класс ctype. Первая функция-член может принимать выражения для своего первого параметра, называемого битовой маской и сформированной из сочетания значений маски по битовой операторы (|
, &
, , ^
~
).
Пример
// ctype_is.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main() {
locale loc1 ( "German_Germany" ), loc2 ( "English_Australia" );
if (use_facet<ctype<char> > ( loc1 ).is( ctype_base::alpha, 'a' ))
cout << "The character 'a' in locale loc1 is alphabetic."
<< endl;
else
cout << "The character 'a' in locale loc1 is not alphabetic."
<< endl;
if (use_facet<ctype<char> > ( loc2 ).is( ctype_base::alpha, '!' ))
cout << "The character '!' in locale loc2 is alphabetic."
<< endl;
else
cout << "The character '!' in locale loc2 is not alphabetic."
<< endl;
char *string = "Hello, my name is John!";
ctype<char>::mask maskarray[30];
use_facet<ctype<char> > ( loc2 ).is(
string, string + strlen(string), maskarray );
for (unsigned int i = 0; i < strlen(string); i++) {
cout << string[i] << ": "
<< (maskarray[i] & ctype_base::alpha "alpha"
: "not alpha")
<< endl;
};
}
ctype::narrow
Преобразовывает символы типа CharType
, используемого языковым стандартом, в соответствующие символы типа char
в собственной кодировке.
char narrow(CharType ch, char default = '\0') const;
const CharType* narrow(
const CharType* first,
const CharType* last,
char default,
char* dest) const;
Параметры
ch
Символ типа Chartype
, используемого языковым стандартом, который требуется преобразовать.
default
Значение по умолчанию, которое должно назначаться функцией-членом символам типа CharType
, не имеющим эквивалентных символов типа char
.
first
Указатель на первый символ в диапазоне символов для преобразования.
last
Указатель на символ, следующий сразу за последним символом в преобразуемом диапазоне символов.
dest
Константный указатель на первый символ типа char
в целевом диапазоне, который хранит преобразуемый диапазон символов.
Возвращаемое значение
Первая функция-член возвращает собственный символ типа char
, соответствующий символу параметра типа CharType default
, если эквивалент не задан.
Вторая функция-член возвращает указатель на целевой диапазон собственных символов, преобразованных из символов типа CharType
.
Замечания
Первая функция-член возвращает do_narrow(ch
, default
). Вторая функция-член возвращает do_narrow (first
, , last
default
, dest
). Только основные исходные символы всегда имеют уникальный прообраз CharType
в narrow
. Для этих базовых исходных символов хранится следующий инвариант: narrow
(widen (c), 0) == c.
Пример
// ctype_narrow.cpp
// compile with: /EHsc /W3
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc1 ( "english" );
wchar_t *str1 = L"\x0392fhello everyone";
char str2 [16];
bool result1 = (use_facet<ctype<wchar_t> > ( loc1 ).narrow
( str1, str1 + wcslen(str1), 'X', &str2[0] ) != 0); // C4996
str2[wcslen(str1)] = '\0';
wcout << str1 << endl;
cout << &str2[0] << endl;
}
Xhello everyone
ctype::scan_is
Обнаруживает первый символ, соответствующий указанной маске, в диапазоне.
const CharType *scan_is(
mask maskVal,
const CharType* first,
const CharType* last) const;
Параметры
maskVal
Значение маски для сопоставления с символом.
first
Указатель на первый символ в просматриваемом диапазоне символов.
last
Указатель на символ, следующий сразу за последним символом в просматриваемом диапазоне.
Возвращаемое значение
Указатель на первый символ в диапазоне, соответствующий указанной маске. Если такое значение не существует, функция возвращает последнее значение.
Замечания
Функция-член возвращает do_scan_is(maskVal
, first
, ). last
Пример
// ctype_scan_is.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc1 ( "German_Germany" );
char *string = "Hello, my name is John!";
const char* i = use_facet<ctype<char> > ( loc1 ).scan_is
( ctype_base::punct, string, string + strlen(string) );
cout << "The first punctuation is \"" << *i << "\" at position: "
<< i - string << endl;
}
The first punctuation is "," at position: 5
ctype::scan_not
Обнаруживает первый символ, несоответствующий указанной маске, в диапазоне.
const CharType *scan_not(
mask maskVal,
const CharType* first,
const CharType* last) const;
Параметры
maskVal
Значение маски, которому не должен соответствовать символ.
first
Указатель на первый символ в просматриваемом диапазоне символов.
last
Указатель на символ, следующий сразу за последним символом в просматриваемом диапазоне.
Возвращаемое значение
Указатель на первый символ в диапазоне, не соответствующий указанной маске. Если такое значение не существует, функция возвращает последнее значение.
Замечания
Функция-член возвращает do_scan_not(maskVal
, first
, last
).
Пример
// ctype_scan_not.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc1 ( "German_Germany" );
char *string = "Hello, my name is John!";
const char* i = use_facet<ctype<char> > ( loc1 ).scan_not
( ctype_base::alpha, string, string + strlen(string) );
cout << "First nonalpha character is \"" << *i << "\" at position: "
<< i - string << endl;
}
First nonalpha character is "," at position: 5
ctype::tolower
Преобразует символ или диапазон символов в нижний регистр.
CharType tolower(CharType ch) const;
const CharType *tolower(CharType* first, const CharType* last) const;
Параметры
ch
Символ для преобразования в нижний регистр.
first
Указатель на первый символ в диапазоне символов, регистр которых нужно преобразовать.
last
Указатель на символ, следующий сразу за последним символом в диапазоне, регистр символов которого нужно преобразовать.
Возвращаемое значение
Первая функция-член возвращает строчную форму параметра ch. Если нижная форма не существует, она возвращает ch.
Последняя функция-член возвращается.
Замечания
Первая функция-член возвращает do_tolower(ch
). Вторая функция-член возвращает do_tolower(first
, last
).
Пример
// ctype_tolower.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc1 ( "German_Germany" );
char string[] = "HELLO, MY NAME IS JOHN";
use_facet<ctype<char> > ( loc1 ).tolower
( string, string + strlen(string) );
cout << "The lowercase string is: " << string << endl;
}
The lowercase string is: hello, my name is john
ctype::toupper
Преобразует символ или диапазон символов в верхний регистр.
CharType toupper(CharType ch) const;
const CharType *toupper(CharType* first, const CharType* last) const;
Параметры
ch
Символ для преобразования в верхний регистр.
first
Указатель на первый символ в диапазоне символов, регистр которых нужно преобразовать.
last
Указатель на символ, следующий сразу за последним символом в диапазоне, регистр символов которого нужно преобразовать.
Возвращаемое значение
Первая функция-член возвращает прописную форму параметра ch. Если форма верхнего регистра не существует, она возвращает ch.
Последняя функция-член возвращается.
Замечания
Первая функция-член возвращает do_toupper(ch
). Вторая функция-член возвращает do_toupper(first
, last
).
Пример
// ctype_toupper.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc1 ( "German_Germany" );
char string[] = "Hello, my name is John";
use_facet<ctype<char> > ( loc1 ).toupper
( string, string + strlen(string) );
cout << "The uppercase string is: " << string << endl;
}
The uppercase string is: HELLO, MY NAME IS JOHN
ctype::widen
Преобразовывает символ типа char
в исходной кодировке в соответствующий символ типа CharType
, используемый языковым стандартом.
CharType widen(char byte) const;
const char *widen(const char* first, const char* last, CharType* dest) const;
Параметры
byte
Символ типа char в исходной кодировке для преобразования.
first
Указатель на первый символ в диапазоне символов для преобразования.
last
Указатель на символ, следующий сразу за последним символом в преобразуемом диапазоне символов.
dest
Указатель на первый символ типа CharType
в целевом диапазоне, который хранит преобразуемый диапазон символов.
Возвращаемое значение
Первая функция-член возвращает символ типа CharType
, соответствующий символу параметра исходного типа char
.
Вторая функция-член возвращает указатель на целевой диапазон символов типа CharType
, используемого языковым стандартом, преобразованных из исходных символов типа char
.
Замечания
Первая функция-член возвращает do_widen(byte
). Вторая функция-член возвращает do_widen(first
, last
, ). dest
Пример
// ctype_widen.cpp
// compile with: /EHsc /W3
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc1 ( "English" );
char *str1 = "Hello everyone!";
wchar_t str2 [16];
bool result1 = (use_facet<ctype<wchar_t> > ( loc1 ).widen
( str1, str1 + strlen(str1), &str2[0] ) != 0); // C4996
str2[strlen(str1)] = '\0';
cout << str1 << endl;
wcout << &str2[0] << endl;
ctype<wchar_t>::char_type charT;
charT = use_facet<ctype<char> > ( loc1 ).widen( 'a' );
}
Hello everyone!
Hello everyone!