Поделиться через


Класс 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,firstlast - ). 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, lastfirst - ), с 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, lastfirst - ), с 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, , lastdefault, 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!

См. также

<локаль>
Потокобезопасность в стандартной библиотеке C++