Г. Шилдт - Полный справочник по C++ (1109478), страница 115
Текст из файла (страница 115)
Функции обработки массивов расширенных символов Снмнольный зкннвнлент исьаг и *ивезпьг(совах исьаг и *вл; нсьаг с сеъ в1ие т. пит) зих ъвпевсвр(осине исЬаг с *з(г), сепах нсЬах с *н(т2, а1ие с пип)) вонах С *впавсру(исЬах С *НЛ'т, совах ъ:сЬап Х "НЬ2, апие Х пит) исьап с *нвепвоие(ъюьах с *зс'т, совах чинах и *зла. а1ие с пит) исьаг и ивеввес(исьаг с *шг, нсьаг с ъун итие с пигп) вепппсте ( ) -4 Функции преобразования многобай~овых и расширенных символов Таблица 31.6.
Функции преобразования многобайтовых и расширенных сииволов Фу)иана нвих т. Ьхоис(пис св) Символьный эквивалент Преобразует символ сп в его расширенньи зквивапент и возвращает результат. В случае ошибки возвращает константу наон ипи многобайтовый симеон. если сим- вол сп не является однобайтовь:м Возобновляемая версия функции въхеи(), описанная параметром нмае Возвращает положительное число, равное количеству баитон е следующем многобаитовом символе Если спедующии символ является нулевым, возвращается нуль. При ошибке возвращается отрица- тельное значение Возобновляемая версия Функциивъссес(), описанная параметром л(а(а Возвращает положительное число, равное количеству бентон в следующем многобайтовом символе Если спедующии симноп является нулевым, возвращается нуль При ошибке переменной еххтю присваивается макрос вхьввс Если параметр н(а(в представляет исходное состояние преобразования, функция возвращает значение ск.па Возобновляемая версия функции вьассиса () ., описан- ная парамет ром з(а(е.
())пинается от функции въхвссисв() тем, что параметр )и является неянным указателем на исходнь и мессин При ошибке перемен- ной еххлс присвзинается макрос вхъвая а1хе с вьгхес(сслвс сьах *нл; вхие с пит, вьисасе с *л(а(е) аз.ие с въхсонс(иенах с *си(. совах сЬаг )и, ахие с пит, въахахе С *Швиц 1ис въа1схх(совал тпЬахахе С Наин) в1хе с вьагссиса(иенах с *пш, сосне сваг **)и, а1ие с вьнсасе с *Фа(е) Глава 31. Функции обработки расширенных символов В стагцтарпьой библиотеке языка Сч-т определены разнообразцыс функции. предназначе)гиыс для преобразования многобаитоаых и расширение(х символов. Эти функции, псрсчислсцныс в табл. 3(.6, используют заголовок <свсЬах>.
Многие из них янлиотся нозоб)гонллелннми (гсз(а)(аЫс) версиями обычных функций, предназначенных для преобразования многобаитовь(х символов. Возобновляемые версии используют ицформаци)о, псрсданасму(о с помощшо параметра типа въвсасе с. Если этот параметр равен нулю, функция создаст свой собсгвснный объект типа вЬасасе с. взке с исвсоиь(сиак ои(, исьак с сй, мьасаке с "з(а(е( азке С иоеккоюьв(сЬак *оп( сопев иовах с * (п. вхке к пил(, аьасаке г. *з(а(е) хпс иссоь[изас г сп) Окоячлгше иабл, Збс Слмвольлый эквивалент Возобновляемая версия функции исскхкь( и описанная параметром з(а(е.
При ошибке переменной еккпо присваивается макрос ахьаве Возобновляемая версия функции исасоаьв( П описанная параметром к(а(е. Отличается от функции исасоаьа () тем, что параметр (и является неявным указателем на исходный массив. При ошибке переменной еккпо присваивается константа ахьаае Пресбразует символ сл а его однобайтовый эквивалент. При возникновении ошибки возвращается константа аов Часть Ш. Библиотека стандартнык функций Полный спр авочник по оличество кого круга строк и ов является в пасти 111. ма важную о характер.
иблиотеку нована на Стандарт языка С++ предусматривает большое к классов, обеспечиваюших выполнение широ операций„включая ввод-вывод, обработку :;:,!д::,-~:;,';;:,;:,.':"::;,~~ математические вычисления. Библиотека класс дополнением библиотеки функций, описанных Библиотека классов представляет собой весь пасть языка С++ и во многом определяет ег Несмотря на ее большой размер, освоить б классов достаточно легко, поскольку она ос объектно-ориентированных принципах. ~лаве описывается библиотека стандартных классов ввода-вывода.
Как указывалось В. в части И, в настояшсс время язык С++ использует два варианта библиотеки вволавывода. Первая библиотека представляет собой устаревший набор функций, унаследоватгньгх от языка С и нс описанных в стандарте языка С-ьв. Вторая библиотека содержит классы, образуюшие современную шаблонную систему ввода-вывода, предусмотренную стандартом языка Счнь Поскольку совремснтгая библиотека ввода-вывода является расширением старой, в этой главе мы сосрелоточимся на изучении новых срслств. ~щщщр Обзор срвдсглв ввода-выводв содвржиглск в главах 20 и Гт.
В1 Классы ввода-вывода Стандартная сиглема ввода-вывода языка С++ состоит из довольно сложных шаблонных классов,.перечисленных ниже. Ъев?е ?ев Универсальные операции ввода-вывода Ъвв?с вккевеьвя Ъевас ?вккеее Низкоуровневые операции ввода-вывода Операции ввода Операции вывода Операции ввода-вывода Ьавас овевает Ьев?е ?алекеев невке Е?? Ы Е Низкоуровневые операции фвйгювою ввода-вывода Операции файлового ввода Операции файлового вывода Операции фанлового ввода-вывода Ъавкс ?Евсееве Ъвв?е еев?кевтк Ъввас Еввкеее Ьааае вак?вдЬея Ьавае квак?лдевкевк ьвв?е авек?едвекеее Ъев?с ввк?лдвькеевг Низкоуровневые операции строкового ввода-вывода Операции строкового ввода Операции строкового вывода Операции строкового ввода-вывода Часть В.
Библиотека стандартных классов В иерархию классов ввода-вывода входит также нешаблонный класс лов ьаве. Он содержит определения различных элементов системы ввода-вывода. Система авода-вывода состоит из двух связанных между собой, но разных иерархий шаблонных классов. В основе первой иерархии лежит класс низкоуровневого ввода-ВЫВОда Ьавхо вьееамьця. ЭтОт КЛаСС, ОбЕСПЕЧИВаЮШИй ПОддсржКУ аСЕй СИСТЕМЫ, предназначен для выполнения основных низкоуровневых операций ввода-вывода.
Классы ьавфе ех?еьця и ьевъе вееыдьця являются произволными от класса ьавхе всееаеьцд. В обычных приложениях нет необхолимости непосредственно обращаться к классу Ьавфо ваееаюЬце и его подклассам. Для ввода-вывода в программах обычно используется иерархия классов. основанная на классе Ьав5.о лов, Этот ютасс обеспечивает высокоуровневые операции, прелусматриваюшие форматирование, проверку ошибок и сохранение информации о состоянии потока ввода-вывода. Класс Ьав1е хов является базовым по отношению ко многим производным классам, к которым, в частности, относятся классы Ьавхо звахеавц Ьа- вде ове еыа и ъавае ховегеаю.
Эти классы использую~ся соответственно для созлания потоков ввода, вывода и ввода-вывода. В часпюсти, классы Ьав1е ЕЕвехеее и Ъавхе 1вегзидвегеаю являются производными от класса ьавзе 1вегеае, классы ьавае оевегеае и Ьавхе овег1идвегеаю — от класса Ьав1е овегеае, а классы Ьавйе Евегеаа» и Ъавхе вег1идвегеае — от класса Ьавз.е Еовегеакв. Класс Ьавде 1ов является наследником класса зов Ьаве.
Таким образом, любой класс, производный от класса Ьавде Еов, имеет доступ к членам класса зов ьаве. Шаблонными параметрами классов ввода-вывода являются тип и атрибуты символов. Рассмотрим а качестве примера шаблонную спецификацию класса Ьав1е 1ов. се»»р1аее сс1аов сьахтуре, с1авв Аеех и сьаг еха1евссьагтуре» с1авв Ьаатс 1ов:риЬ11с 1ов Ьаае здесь параметр сьагтуре залает тип символа (т.е. еьех или меьаг е), а параметр аеег указывает тип, описывающий его атрибуты.
Обобщенный тип еьаг Егедсв представляет собой служебный класс, в котором определены атрибуты символа. Как указано в главе 20, библиотека ввода-вывода создаст две специализации шаблонных иерархий классов одну для 8-битовых символов, а другую — для расширенных. Таблица соответствий между именами шаблонных классов, а также их версиями для обычных и расширенных символов приведена ниже. Кпасо двя раоаирвннык символов Шаблонный класс Квасе Лнв символов Ьаа1е»оа Ьаа1е 1аггеа»» Ьааае оасгею» м»оа Еоа Ьаа»о»оиггеаи Ъаа»е Евахгеы» Ьаа»е оЕаггеап Ъаа1е Еахгеы» »аегапдаехеае оагг1пдасгеа»» аегзпдаегеы» Ьаа»о 1асг1пдасгеаа» Ееа1е оасг»пдаггеы» Ъаа1о асгапдаггеы» мгаегзпдаегеае моасхаидаггеаи маег1»»дасгеа»» аехеааа»ие Е»1 З Е вхг1пдЬпе масгеаеЬиЕ мв»зеьие махгзпдЪие Ъааве аггеанв»»Е Ьаа1е Е11еЬпе Ьаа1е аег»идЪпе Поскольку подавляющее большинство программистов используют в своих программах символьный ввод-вывод, именно эти классы мы будем применять в данной главе.