Г. Шилдт - Полный справочник по C++ (1109478), страница 102
Текст из файла (страница 102)
С помощью функции егаве() можно удалить символы из строки. Один из ее вариантов выглядит следующим образом. й ясхзпд ьехаяе(яьае суре пап = О, ятае суре ззит = проя) з Зта функция улаляет лиаз символов из вызывающего объекта, начиная с позиции, заданной параметром т/аг/. Функции зпвегс ( ), атаев () и хер1 все ( ) иллюстрируются следующей программой. // Демонстрация функций Ьпяехс(], ехаяе() и тер1асе(] ()1пс1из)е <Ьоястеаи> (]1пс1ие)е <ятх1пд> пяьпд пакзеярасе яМз Ьпс яза1п() ( ясхьпд ясх1("Бсхьпд )запз)11пд с++ясу1е.")з яттзпд ятт2("Роиех ЯТЬ.")з сопт « "Начальные строкиз 1п"з сопс « "яст1з " « ясх1 « епс)1з сопя « "яст2.
"" « ясх2 « " 1п1п"з // Демонстрация функции Ьпяегс(). сопС « "Вставляем строку яСХ2 в строку ятх1з 1п"з ясх1.зпяехс(б, ясх2]; сост «ятт1 « "1п1п" з // Демонстрация функции ехаяе(). соус « "удаляем 9 символов из строки ясх1з1п"з яст1.етаяе(б, 9)з соус «ясх1 «''зпзп" з // Демонстрация функции тер1асе. Глава 24. Введение в стандартную библиотеку шаблонов сонг « "заменяем 8 символов строки ягг1 строкой всг2:)и"> ясг1.гер1асе(т, 8, ягг2); сонг « ягг1 « еда1; гесцгп О; Результаты работы этой программы приведены ниже.
Исходные строки: ягг1: яггьпд Напс)11пд С++ ягу1е. ясг2: Роиег ЯТГ Вставляем строку ясг2 в строку ясг1: ясг1пдяТЪ Роиег )запН11пд С++ ясу1е. Удаляем 9 символов из строки ягг1: Ясг1пд )запс)11пд С++ вгу1е. Заменяем В символов в строке ягг1 строкой ягг2: яггъпд ЗТВ Роыег Напп11пд С++ ясу1е. Поиск символа в строке Класс вег1пд содержит Неекопько фУнкций-членов, предназначенных Лля поиска подстрок, в частности функции 11по() и гг1п(((). Их прототипы приведены ниже. 1 я1ге гуре 11пг)(сопят всгьпд ьзмоЬ, яьге суре вин=о) сопев; вьве суре г11пд(сопев ясгзпд ьзвпЬ, яьге суре пап=пров) сопев; Начиная с позиции, заданной параметром згаг(, функция 11пп() выполняет поиск первого вхожления строки„содержащейся в объекте зггяЬ. Если подстрока найдена, функция 81п6() возврашает индекс се первого символа в вызываюшем объекте.
Если подстрока нс найдена, возврашается константа пров. Функция гг1пд() является противоположностью функции 11пд(). Начиная с позиции, заданной параметром згагг, функция гя1гк)() выполняет поиск послелнего вхожления строки, содсржашейся в объекте зьоЬ. Если полстрока найдена, функция гг1пп() возвраШает итшскс ее последнего вхождения в вызываюШий объект. Если подстрока не найдена, возврашается константа пров. Рассмотрим короткий пример.
в котором используются функции 81пе() и г81пп(). ()1пс1цде <1ояггеат> $1пс1цде <вгггпд> ця1пд паиеярасе всс); 1пг таьп() ( 1пС 1; ясгупд я1 "Чистые руки, горячее сердце, холодная голова"; ягг1пд я2; 1 = в1.11пс)( Чистые" ); г1(1!=ясгупд::пров) ( соцс « "Найдено соответствие в позиции " « 1 « епс)1; Часть П. Язых С++ соцп « "оставшаяся часть строкиз'зп"з я2.аяятдп(я1, з, я1.яз.зе())з сосо « я2з соцс « "1п'зп"; 1 = я1.11пб("горячее")з 11(1!--ясг1пдззпроя) ( соцо « "Найдено соответствие в позиции " « 1 « епс)1з соцо « "Оставшаяся часть строкз<з'зп"з я2.авя1дп(я1, з., я1.яз.те())з соцс « я2; соцс « "тптп"з ).
= я1 11пй("холодная"]з зт(1з=ясг(гдззпроя) сонг « "Найдено соответствие в позиции " « з « епс)1з соцг « "Оставшаяся часть строкиз'зп"з я2.аяя1дп(я1, з.. з1.язве())з соцп « я2з соцт « увптп"з /т находим последнюю запятую. з. = я1.г11пс((", "); 11(1!=ясг1пдззпроя) ( соьс « "Найдено соответствие в позиции " « 1 « епс)1з соцс « "Оставшаяся часть строкиз'зп"з я2.аяв1дп(я1, 1, я1.я1те())з соцд « Я2з тегцгп Оз Результат работы программы показан ниже. Найдено соответствие в познцииз О Оставшаяся часть строкиз Чистые руки, горячее сердце, холодная голова Найдено соответствие в позишзиз 13 Оставшаяся часть строки: горячее сердце, холодная голова Найдено соответствие в позицииз 29 Оставшаяся часть строки: холодная голова Найдено соответствие в позиции: 27 Оставшаяся часть строки: холодная голова з лава 24.
Введение в стандартную библиотеку шаблонов Сравнение строк Для сравнения полных строк обычно применяются перегруженные операторы сравнения, описанные выше. Олнако, если возникает необходимость сравнить часть одной строки с другой строкой, необходимо использовать функцию-член совраке(). и зпо созарате(яьхе гуре нап, я1хе Суре лиаз, сопле яетьпд ьззгоь] сопягз Эта функция сравнивает вит символов, принадлежащих объекту згпзЬ, с вызывающей строкой. Если вызывающая строю короче строки язоЬ, функция соврете() возвращает отрицательное число.
Если вызывающая строка длиннее строки лзззЬ, функция ссеазахе() возвращает положительное число. Если длины строк равны, возвращается нуль. Создание С-строки Хотя объекзы класса векапя полезны сами по себе, иногда возникаез необходимость преобразовать их в С-строки. Например, объект класса векзп(з можно применить лля созлания имени файла. Олнако при открытии файла необходимо задать указатель на обычную С-строку. Для решения этой проблемы предназначена функция с век() .
Ее прототип привелен ниже. $ сопев с]зат *с яст() сопят з Эта функция возвращает указатель на С-строку, содержащуюся в вызывающем объекте класса векзпя. С-строка не должна изменяться. Кроме того, нет гарантии, что она останется корректной после выполнения операций нал вызывающим объектом. Строки как контейнеры Класс век1тзя соответствует многим условиям, которые предъявляются конзейнсрам. Это значит, что он поддерживает стандартные контейнерные функции, такие как Недьп(), еп((() и в1ве(). Следовательно, к объектам класса век1пя можно применять алгоритмы из библиотеки БТ], // Строки как контейнеры.
аьпс1пз]е <ьоят севе> а1пс1пде <ятпьпд> аапс1пбе <а1оохШла> ияьпо яаазеярасе враз зпг. ыазп(] ( ястагп ягп1(кббработка строк в языке сь+ очень проста")з ягхьпузз1еетаеот рз зпе // Применение функции яьхе() хох(1=0з 1<ятт1.я1хе()з 1++) соис « яст1(1]з сопс « епб1з // Применение итератора. р = яст1.]зедьп()з м)з11е(р != ясх1.епб(]] соус « *р++з сопя « епб1з Часть П. Язык С++ // Применение алгоритма сочах(). = соппг.(вхх1.Ьедзп(), вхх1.епд(), 'з.']з сопс « "В строке всг1 содержится" « з « "символов 'а' 1п"з // Применение алгоритма сгапв1огт() // для преобразования строчных букв в прописные.
схапвгохт(ясг1.Ьедуп[), вгх1.епб(), ягх1.Ьедуп(), хопррех')з р = вхх1.Ьедзп()з иЬ11е(р != всх1.епд()) сопя « *р++з сопя « епб1з геспгп 0/ Результат работы этой программы показан ниже. | Обработка строк в языке С++ очень проста Обработка строк в языке С++ очень проста В строке яхх1 содержится 3 символа 'а' ОБРАБОТКА СТРОК В ЯЗЫКЕ С++ ОЧЕНЬ ПРОСТА Запись строки в другой контейнер Хотя класс вег1пд является контейнерным, обычно строки хранятся в других стандартных контейнерах, например, в ассоциативных массивах или списках. Так, программу, имитируюцзую телефонную книжку, можно переписать иначе.
Для хранения имен и телефонных номеров она использует ассоциативный массив, содерхгацзий объекты класса вег1пд, а не С-строки, // Г!рименение ассопиативного массива строк // для имитации телефонной книги. 91пс1пбе <Тояххеазп> 91пс1пс)е стар> $1пс1ис)е <ясхзад> пвзпд патеярасе вгс)з злх сза1п() тар<ягхапд, яхг1пд> бахесгогуз г)1хесхоху.гпвехх(ра1х<вгггпд, вхггпд>("Том", "555-4533'))з г)1хесхоху.1пяегх(ра1г<яхх1пд, ясг1пд>("Крис", "555-9678"]); багессогу.звяехс(рагх<ясг1пд, всхупд>("джон", "555-8195"))з с)1гессоху.1пвегс(ра1г<вхг1пд, ясхапд>("Рэчел", "555-0809"))3 всгзпд вз сопх « "Введите имяз с1п » яз тар<ясх1пд, всг1пд>ззгсехасог рз р = 81гессоху.11пб(я)з 11(р != з)1гесхогу.епб()) сопс « "Номер твледоназ " « р->весопбз е1яе Глава 24. Введение в стандартную библиотеку шаблонов соуп « "имени в справочнике нее.тп"г хесогп Ог Н Заключительные замечания о библиотеке ЗТЕ Библиотека Я'Е является необъемлемой частью языка С++.
Многие задачи программирования можно и нужно решать с ее помошью. Эта библиотека обладает большой мошью, гибкостью, и, хотя синтаксис шаблонов довольно сложен, ее очень легко использовать. Ни один программно~ на языке С++ нс имеет права пренебрегать библиотекой Б'П., поскольку она играет весьма важную роль в создании новых прог~ими. Часть й. йзмк С++ Полный спр 2Вочник по Библиотека стьаФртнцк " Функций Язык С++ содержит два вида библиотек. В первой библиотеке хранятся стандартные универсальные функции, не принадлежащие ни одному классу. Эта библиотека унаследована у языка С.