Г. Шилдт - Полный справочник по C++ (1109478), страница 114
Текст из файла (страница 114)
Часть Ш. Библиотека стандартньи функций Й~ Функции классификации расширенньи символов В заголовке <сес»уре> солсржатся прот лз((ты функпий классификации расширенных символов. Зти функ~(ии классифицируют расгцирениыс символы или преобразуют строчные символы в проппа)ыс, и ~п)оборот. Зти (Рупкпии перечислены в табл. 31.1 вместе с их символы(ыми зквивалс(ггами, описанными в главе 26. Таблица 31 1. Функции классификации расширенных символов Сннеольнье)аненеааент Функция веазгааа ( ) > на1рьа ( ) веса»нз() хнвьд1» О ва» кена1анаа(нвс» » СЛ) ва» ьека1рьа(еьа»» сл) ва» »неся»»1(е»а» » СЛ) хае 1ннотд1»(ньс»» сн) (а» Веед»аръ(н1а»» сн) Часть 1бх Библиотека стандартных функций 1995 году в ста(дарг языка С вошли функции обработки расширенных символов, В которые впоследствии сяли частью ста)цмрта языка С-' " З(и функпии оперируют символами ткпа нсца»» л.ппюи 16 бит.
Большинство этих функпии нмсюз впало(и, работаю(цис с символами тш)а снах. Например. функция хвтенрасе О является вариантом функ~в(к з.внрасе(). Как правило, имена функции обработки расшкрс(шых символов о(лкчшотся от имен соотвстствуюших сиьшольнь)х функции однои буккон — "м".
функции обработки расширенных символов используют два заголовка: <сестрах> и <сес»уре>. Программы на языке С использу(от заголово шыс файлы егсцак.н к нс»уре.ц. В заголовке <сне»уре> опрсделшгы типы >гзп»». нс»»апн» и тес»уре е Многие из фупкпии обработки расшнрспнь(х символов (толучюот в качестве параметра расшнренпыи символ, кмс)ошип тип ктс»» Зтот тпп является ап;логом типа 1а», применяемого в символьных функ((иях Типы тес»»апн» и ес»уре» используются соответственно лля прсобразонюцш символов и ил класскфккапик. Расшкрсш(ый признак конца фаила определен к(як) а) ггок ивор Кроме типа нвп»» в заголовкс <сесна»> определены ткпы нс)та» е, авве».
и е)>в»а»е». Тип ясна»» созласт расширс(шый символ, а тип в1ке» задает тип значения, возврашасмого оператором н1»есб Ткп ло>н»а»е» опксываст объект, в котором хранится информация о преобразовании многобаитового символа в расширенпыи. В заголовке <се»Ба»> определены также макросы ыцы,, нвоу, нснАв нлх и нснлк мтн. Послслние два м~кроса определяют максимальное и минимальное значения, которые могут храниться в объекте ткпа кена»». Несмотря на то по функции об(юботки расширенных симво:юв представлснь( в стандарпюи библиотеке лостагоюю широко, они применяются редко. Одна из причин этого закл(очастся в том, что система ввода-вывода языка С++ и библиотека классов обеспечивают работу с обы шымк и расширенными символами с помошыо ц)аблонных классов.
Кроме того, интерес к программам. используюшим расширенные символы, оказался меш ше, чем ожидалось. Разумеется, со временем эта ситуация лк)жег измениться. Поскольку многие функции обработки расширсю(ых символов аналогичны символьным и доволыю редко применяются большинством программистов, наш обзор будет кратким. Окончание нзаан. Зз.] ьнивоениз] яквнваланг 1в1омег ( ) Кроме функций, перечисленных в табл. 3!.), в заголовке <снегуре> определены функции, предоставляющие расширяемые символы классификации символов. * мстуре е мсеуре [сопят сиат *апг) ] 1пе 1ямсеуре(мвпе е сЛ, мсеуре е аиг аь] ] Функция мсеуре() возвращает значение, которое можно передать функции 1вмсеуре() в качестве параметра анг аЬ. Строка апг задает свойства, которыми должен обладать символ. Значение параметра аиг аЬ позволяет определить, обладает ли символ сЬ указанными свойствами.
В случае положительного ответа функция 1вмсеуре() возвращает ненулевое значение, иначе она возвращает нуль. Свойства, перечисленные ниже, поддерживаются всеми без исключения средами выполнения программы. а1д1е ршзсс я1рца 1оъзет сррех а1зз па ОтарЪ врасе спег1 рг1ззе хМо1Е Следующая программа демонстрирует применение функций мссуре() и ).вмсеуре() ° О1пс1ик[е <1сястеат> $1пс1и([е <снегуре> цявпд пязаеярасе яее)] 1пе аза1п[] ( мстуре е х; х = мстуре("ярясе") 1т(1ямстуре(П' ', х)) саит « "Пробел.чп"; теецтп 0; ) Программа выводит на экран слово "Пробел.".
Функции мсетяпв() и еомсеталв() также определены в заголовке <сззсеуре>. 1 мсттяпя е мсстяпя(сопят с]зят "нзарр[ня)] муне е есмсстапя [мзпе е сЛ, мсетяпя е *тарр(ая аб) ] 1ле 1вм1<чзет[мзле г. сЫ зле 1вмрг1ле (м[ззе е сл] зле з.вмрсяое(мзле е СЛ) 1ле 1ямярасв[м(ле е сЫ 1ле ).вверяет(мзззт. е сл] 1га 1ямха1дге(малс Е СЫ мадле е ео1омет[мзле е сЫ м1лт, е еоччзрет(мзле с сЛ] Глава 3]. Функции обработки расширенных символов авртзсе() 1яралсс() 1яврвое ( ) 1 вотрет ( ) авяагд1Е ( ] со1омег ( ) говорят(] Функция мссгепв() возврашает значение, которое можно передать функции сомссгапв() в качестве параметра таррглл оЬ.
Строка гвггрр[г[л задает преобразование одного символа в другой. Это значение позволяет функции авмссгапв() выполнить преобразование символа гб и вернуть его результат. Свойства, перечисленные ниже, поддерживаются всеми без исключения средами выполнения программы. со1омег гоиррег Рассмотрим короткий пример, иллюстрируюший применение функций мссгапв() и еомсегапв(). а1пс1иг[е к1овегеази> «1пс1иг)е ксмссуре> иезид палРеврасе еес)Р апс Рзаап() ( мссгапя с х; х = не[гсов("Со1омег")Р мсьаг с с)Р = сомссгапв[ь'и', х) соис кк [с)Раг) с)РР гееигп ОР ) В главе 25 уже упоминались некоторые функции ввода-вывода расширенных символов.
В табл. 31.2 эти функции определе[РЫ В ЗаГОЛОВКе ксмсвягг>. Обратите внимание на то, что функции вмргапсв() и мвмргапев() нуждаются в дополнительном параметре, и этим они отличаются от своих символьных эквивалентов. Таблица 31.2. Функции классификации расширенных символов Слмаольвый ви[лввлвяг кдеес ( ) кдесв() мкас с едесмс [тгьв зггеат) ъгвгъс е *йдесмв [мсьвг е за, 1пс пит, ттьв змеат) масс С Ериьмс [мсьег с его, втьв *Мгеат) 1ее криемв( сопве монах С *нг. втьв *элеат) аес Емрг1псс (Вт[,Х Э[ГСап[, ссевс мсвег Е [т[, ...) апс кмвсесв отпл вггеат, сопве мсавг е [т[....) мзпс ь десмс[гтьв *мгввт) масс с деемсьег[Р масс с рисмс [мсьаг с са, втьв в[гает) мыле е риемсьаг(мсьвг с сш кросс [) креев () йргапек() евсеев() деев() деесввг[) риис() риесаег() Часть й).
Библиотека стандартных функций ~® функции ввода-вывода расширенных символов Окончание лшах Л.2 Символьный эквивалент хпс В«]гтхпес(мсьат с «эгг вххв с лил], сопвк мсЬвг С «йл1, ...) ьпсвес[) чертьпсе() черт]пес() хпе чнргхпес [сспвс ъгсъвт с *игн, чв ьавс агд] хпс м]этзпес(сопев мсьет с «йл[, хпт «гвсапс (савве мсьвг С «1лт1, ... ) Кроме функций, перечисленных в таблице, в языке С++ есть ешс одна функция ввода-вывода расширенных символов, й йпс хмЫе(тХЬЕ *мгеаш, хпс Ьоы) г Если параметр Ьа]и положителен, функция дел((е(] создает поток расширенных сим- ВОЛОВ 5[гесс). При отрицательном параметре Ьо]к функция Дмагте(] созлает поток обычных символов, Если параметр Ьо]и равен нулю, поток нс изменяется.
Поток, ориентированный на обычные или расширенные символы, также не будет изменен. Если поток использует расширенные символы, функция возвращает положительное значение. Если поток работает с обычными символами, возвращается отрицательное число. Если ориентация потока еше нс установлена, функция возвращает нуль. Ориентация потока определяется при его первом применении. ~ Функции обработки строк, состоящих из расширенных символов Аналоги строковых функций (см. главу 26), манипулирующие строками, содержащими расширенные символы, приведены в табл. 31.3.
Для их применения необходим заголовок <стус]]аг>. Обратите внимание на то, что функции мсвео)х(] необходим дополнительный параметр, который не используется се символьным эквивалентом. Таблица 31.3. Функции обработки строк расширенных символов Снмлсльньм эквивалент встсас() всгсьт() всгсвр ( ) мсьаг С мсвсве (мсьвт С 5(г1, сопле мсьвт Е «5(гт] мсЬвх е «мсвсьг(сопев мсЬвт с *5(г, мсьвг с сп) зпс мсвслр(сопев сьвг с 51[1, сопле сваг с *5[гт] Глава 31. Функции обработки расширенных символов хпт вмвсвпе(сопев мсьвх с *51[, сопле мсьаг т «]лг1, ...) м).пе т.
ппявтл«с [мхпс т. сп, вхьв *ьтгеат) гпс е р Ьпес[нхьв *снвагл попас мсьаг е Йтл, чв дхвс агд] апе чвмргхпте(мсьвг т *51г, 5).хе с лигл, сопле мсъат е *Фл[, )авт агд] с мргзпсе (сопле мсьвг с ° 1лт1, ча хгвс агд) вттх те() Обратите внимание нв дополнительный параметр лим. ограничивающий количество символов, записывае- мых в строку ггг влсвпе () Обратите внимание на дополнительный параметр лигп, ограничивающий количество символов. записы- ваемых в строку 5[г чртхпсе(] Окончантм майл. л1.3 Функция ' ' Функции преобразования строк, состоящих из расширенных символов Функции, перечисленные в табл.
31.4, являются аналогами стандартных функций преобразования чисел и времени. Они используют заголовок <омсьах >. Функция Си?иолы(ий эко(иклент вггсг?икт() вгггоа() вггго1 Ы вгггоп?() ~ ) функции обработки массивов расширенных символов Для станлартных функций, обрабатывающих массивы символов, например мажору[), также существуют расщиренныс аналоги. Они приведены в табл. 31.5. Эти функции используют заголовок <смсЬах.>. Часть! П. Бибпиотека стандартнык Функций 1пг мсвсо11(сопят мсьвг,г *а(г1, сопит монет т. *ай2) в«хе т. мсвсврп(сопит мсьаг г *ай1, сопят мсЬкг г *Кй2) мсьвг г мсисру(мсьаг г *а(г1, сопит мсьаг г «агг2) кате г мсв1еп(сопит мсьаг, г *кгп мсьаг г *мсипсру(мсьаг г *згг1, сопит мсьаг т *ай2. вт.ие г пигп) мсьаг г *мсапсаг(мсьвт г *к(гт, сопит мсьаг г «а(г2, вхие г пигп) ?сг мсвпсир(сопит мсьаг г 'агг1, сопит мсьаг г ай2, и?ие г ппгп) мсьаг г *мсврьгн(сопвг мсьат г *в(г1.
сопит мсьаг г «ай2) мхьаг г "мсвхсьг(сопит мсьаг г *а1г, т«сьаг г сй) икта г мсвирп(сопвг мсьит г з(г1, сопит монах г "з(г2) мсьаг г *моего\с (мсьат г агг1, сотне мсьаг г *ай2. мсьаг г «епт)р(г) «гсьаг г *мсввгг(сопит мсьаг г «з(г1, сохтвг «гсьаг г "ай2) в1ие г мсихсти(мсьаг г *а(г1, сопит мсьаг г *зй2, вахе г ппгп) Таблица 31.4. Функции преобразования раснмреннык символов в?ие г аистихе(мсьвг г «айт, итие г пик, сопит свах г йпг, соивг вггссг тлк *ргг) лопь?е мсвгоа(сопит мсьаг г «агап, мсьаг г ° *аг?(й 1оия мсвго1(сопит мсваг г *а(ал, мсЬаг г * аят(, 1иг гаЖх) ппвхяпес 1спо мсвгосз(сопвг мсьаг г *а(ап, мсьат г «еп() 1пг Югйл) вгтсо11() иггсирп() вггсру() вгт1еп() игхпсру() вггпсаг() вггпспр() вг грига ( ) вгхтсьх () вггврп() иггго1«Ы Указатель епс(о(г содержит информацию, наобкодимуюдпя продолжения разбиения строки на лексемы вггвгг() вгтхктп() Таблица 31.5.