Функции классификации двухбайтовых символов

Содержание

Заголовок <wctype.h> содержит прототипы тех функций, которые позволяют классифицировать двухбайтовые символы. Эти функции распределяют по категориям двухбайтовые символы или преобразуют регистр буквенного символа, устанавливая строчное или прописное написание. В табл. 19.1 приведены списки этих функций, а также соответствующие им функции для работы с символами типа char, которые были описаны в главе 14.




Таблица 19.1. Функции, предназначенные для работы с двухбайтовыми символами, и соответствующие им функции для типа char
ФункцияСоотвествующая функция для типа char
int iswalnum(wint_t ch)

isalnum()
int iswalpha(wint_t ch)

isalpha()
int iswblank(wint_t ch)

isblank() (Добавлена в С99)
int iswcntrl(wint_t ch)

iscntri()
int iswdigit(wint_t ch)

isdigit()
int iswgraph(wint_t ch)

isgraph()
int iswlower(wint_t ch)

islowert()
int iswprint(wint_t ch)

isprintt()
int iswpunct(wint_t ch)

ispunct()
int iswspace(wint_t ch)

isspacet()
int iswupper(wint_t ch)

isupper()
int iswxdigit(wint_t ch)

isxdigit()
wint_t towlower(wint_t ch)

tolower()
wint_t towupper(wint_t ch)

toupper()

Помимо функций, приведенных в табл. 19.1, в заголовке <wctype.h> определены следующие функции, которые предоставляют открытые средства классификации символов.

wctype_t wctype(const char *attr);
int iswctype(wint_t ch, wctype_t attr_ob);

Функция wctype() возвращает значение, которое можно передать функции iswctype() в качестве параметра attr_ob. Строка, адресуемая параметром attr, задает свойство, которое должен иметь символ. Это значение можно затем использовать для определения, является ли ch символом, который обладает этим свойством. Если является, то функция iswctype() возвращает ненулевое значение. В противном случае возвращается нуль. В любых условиях выполнения программы определены следующие строки свойств:

alnum	digit	print	upper
alpha	graph	punct	xdigit
cntrl	lower	space

В версии С99 также определена строка blank.

Следующий фрагмент демонстрирует использование функций — wctype() и iswctype():

wctype_t x;

x = wctype("space");

if(iswctype(L' ', x))
  printf("Это пробел.\n");

Будет выведено

Это пробел

Кроме того, в заголовке <wctype.h> определены функции wctrans() и towctrans(). Их описания приведены ниже.

wctrans_t wctrans(const char *mapping);
wint_t towctrans(wint_t ch, wctrans_t mapping_ob);

Функция wctrans() возвращает значение, которое можно передать функции towctrans() в качестве параметра mapping_ob. Строка, адресуемая параметром mapping, определяет отображение одного символа на другой. Данная строка затем может быть использована функцией towctrans() для преобразования символа ch. Функция возвращает преобразованное значение. При всех условиях выполнения программы поддерживаются следующие строки преобразования.

tolower		toupper

Следующая последовательность демонстрирует применение функций wctrans() и towctrans():

wctrans_t x;

x = wctrans("tolower");

wchar_t ch = towctrans(L'W', x);
printf("%c", (char) ch);

Выводит

w

на нижнем регистре.