Главная » Просмотр файлов » Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)

Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 148

Файл №1004033 Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)) 148 страницаБьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033) страница 1482018-10-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 148)

Для шаблонов со многими параметрами это приводит к некоторой тяжеловесности записи в связи с многократными упоминаниями параметров. С другой стороны, применение конкатенации удобно и наглядно. Например: яп!ид сагир(е(е иатеЗ (сопи з(г(ндя у(гя( пате, сопя( з(пиеа Тат!!у нате) 1 ге(игл!<гз! нате ч ' ' ч (атйу нате< ) Удобство записи достигается за счет некоторо(о понижения эффективности по сравнению с функцией сотр(е(е пате(), так как сотр1е(е пате3() нуждается в создании одной дополнительной временной переменной (510.4.10). Мой опыт показывает, что это редко когда имеет большое значение, но об этом все же лучше помнить при написании вложенных циклов.

В наиболее критичных ситуациях можно организовать функцию сотр!е(е пате() как встраиваемую или выполнить композицию строк с помощью низкоуровневых операций (В20.б)14]). 20.3. Стандартный строковый шаблон Ьаяс зтппй 705 20.3.11. Поиск Имеется огромное количество функций поиска; гетр)а!в<с!азз СЬ, с!азз "лс = сЬае гса11з<СЬ>, с)аяз А = а!!осагог<СЬ» с!азз Ьаяс я!пад ( риЬДс: У...

!! поиск подлоследовательности (вроде яеагсб0 я!8.5.5): з(ге гуре(гпй(сопя Ьаяс ягг!пба я, з!ге гуре ! = 0) сопя; яге курву)пй(сопя СЬ* р, яге (уре г, яике гуре п) сопи! з(ге гуре(тй(сопя! СЬ* р, з!ге гуре г' = 0) соля!; зае туре !)пй(СЬ с, я(ге гуре1 = О) сопя; добротный поиск подпоследовательности с конца (вроде))пй епй(), В!8.5.5)г к!ге гуре гукай(сопя! Ьаяс ягг!ляа з, з)ге гуре г = прок) сопя!; яге (уре Япй(сот! СЬ* р, яге гуре1, я)ге гуре и) сопя!; з(ге гуре Обпй (солзг СЬ* р, япе гуре г' = проз) соти! яге гуре е)тй (СЬ с, я(ге гуре! = проз) сот!; (поиск первого символа (любого), входящего в аргумент: я1ге гуре()лй ггеяг ог'(соли! Ьаяс кгс(пба з, яге (уре г' = 0) сопзг; з!ге гуре!)пй (яяг о! (сопя! сь* р, я(ге гуре и, яге гуре и) сопя!! я!ге гуре!)пй г)гзи от(сопи! СЬ р, яге гуре!= О) совки! яге гуре 3тй()гя1 ог (СЬ с, яге гуре г' = 0) сопя; )поиск последнего символа (любого), входящего в аргумент:, яге курвой !аз! о5 (сопя! ьаяс яппйа я, з!ге гуре г' = проз) сопзг; яге гурецкий !аз! о)'(соля1 сь* р, яге суре г', яге гуре и) сопя; яге гуре!)лй !азг ог(сот! СЬ* р, я!ге (уре1 = проз) сопи; яге гурецкий 1аяг О!'(СЬ с, ипе (уре ! = проз) сот!; У поиск первого символа, не входящего в аргумент: яге гуре!)пй /яз1 ло( ог(солз1 ьаяс ягс(лба з, к)ге гуре! = 0) сот(; яге !урезай )язг по( оу(сопя! сь* р, яге гуре1, з)ге гуре и) сопки! яге гуре!)пй ))сзг пог о((сопз1 СЬ* р, я(ге (уре1 = 0) соля1; яге гурегйлй /яяг пог о!(СЬ с, з(ге (уре1 = О) сопя(; () поиск последнего символа, не входящего в аргумент: яге гуреуипй 1аз( пог от(соли! Ьаяс я!паба з, яге (уре1 = проз) сопя, яге гуре!)пй 1азг пог о!'(сопя! сь р, яке гуре!, я(ге (уре п) соня; яге гуре!)пй 1азг пог о!'(сопз1 сь*р, з!ге ~ре ! = прок) сот!; яге курвой )аяг по( от(СЬ с, яге (уре1 = прая) соим; Л...

Все это константные функции-члены. Они предназначены для локализации искомой строки, но с их помощью нельзя изменить исходную строку. Смысл и назначение функций Ьаяс иптлб::ЯлйО можно понять, сравнив их с аналогичными стандартными алгоритмами. Рассмотрим пример; ио(й!'( ) ( згг)л8 з = "ассйсйе"; Глава 20. Строки 706 з(2)=='с'&&1(З) =='й' з(4) =='с'&&в(5) =='й' з(!)== с з(5)=='й' з)0)1='с'&&1(0)(= УР з(6)! ='с'&&1(6) 1='й' я ге 1уре 11 = з . ((пй ( "сй" ); в<ге 1уре!2 = з.(у(пй("сй") < з(ге (уре <3 = 1.1(пй ((гз< о(("сй") ( <йге <уре 14 = 1.1(пй 1ая о(("сй") ( зпе (уре(5 = з.!)пй ()гз< по1 о(("сй"); з(ге (уре <6 = з.!(пй !аз( ло( о(("сй") ( У!<1 = 2 УУ!2 = 4 УУ<З = 1 УУ(4 = 5 УУ(5 = 0 У)<6 = 6 з<с(пе з<г(ле з<г(пе з<с(ле з<г(ле з<г(пе ) Если функция)1ий() ничего не находит, она возвращает проз, что означает недопустимую позицию символа.

Применение проз в качестве позиции символа вызывает генерацию исключения оп< о( галие (В20.3.5). Отметим, что возврат)<ий() есть число беззнаковое. 20.3.12. Замена После того как позиция символа в строке определена, значения индивидуальных символов можно изменить при помощи операции индексирования, или можно заменить целую подстроку новыми символами при помощи функции гер(осе (): <етр!а<е<с1азз СЬ, с1ая Зг = слог оааз<СЬ>, с!азз А = а((оса<ог<СЬ» с(азз Ьазк з<г(па ( риЬ(1с: УУ ., УУ замена ((*(Ь!з)(<),(*(Ь<з)(<' и)( другими символами: Ьаяс з(пиеа гер!асе(яге <уре1, з(ге (уре и, сопл< Ьазк з(пиеа з) ( Ьаяс в<с<лез гер(осе(яге <уре <, яге (уре и, солз(Ьазк з<г!пав з, 11ге ~ре <2, яге (уре п2) ( Ьаяс з<г(пеь гер(осе(яге <уре <, в<ге <уре и, сопл(СЬ* р, яге (уре п2) Ьазк з<г(пеа гер(асе (з!ге <уре (', в<ге <уре и, сопл< СЬ* р) ( Ьаз!с аппда гер(осе (яге <уре 1, яге (уре п, яге (уре п2, СЬ с) < Ьаяс в<(<лез гер(осе(Вега<о((', ((ега(ог 12, сопя Ьаяс в<пиеа з) ( Ьаяс з<г!пег гер(осе(Вега(ог1, «ега<ог 12, сопя СЬ* р, яге <уре и); Ьаяс в<(<пав гер!осе(иега<ог (', аега(ог (2, соил< СЬ* р); Ьазк в<(<лез гер(осе(аега(ог (', Вега(ог 12, яге <уре и, СЬ с); <етр(а(е<с(азз!п> Ьаяс з<г!пеь гер!осе(!<его<о( (', аега(ог (2, 1п), 1п)2) У)удаление символов из строки ( замена ничем"); Ьаяс в<пиеа егазе(яге <уре (' = О, з(ге (уре и = проз) 1(ега(ог егазе (!1ега<ог 1); 1(ега<ог егазе (аега<ог()гя, 1(ега(ог <аз<) < го(й с(еаг (); УУ ...

)( УУ удаллет все символы Отметим, что число новых символов может не совпадать с числом символов подстроки. Размер строки изменяется твк, чтобы соответствовать новому содержимому подстроки. В частности, егазе () просто удаляет подстроку и соответственно изменяет размер строки. Например: 707 20.3. Стандартный строковый шаблон )>аз(с з(г(по гоЩ'( ) ( я<пня з = "Ьи< 1 йоге йеап( 1( (гогйз егеи 1/ уои дои ' ( ЬеИеге <п В" ( я. егаяе (О, 4) ( //удоллем начальное 'Ьш " я. гер1асе (з.]1пд( "егеп" ), 4, "оп1у" ) ( з.гер1асе(я.1(пд("((оп'<"),5, "") ( //удаляем с заменой на "" Как и вызов с1еагО, вызов егаяе() без аргументов просто превращает любую строку в пустую строку. Набор функций гер1асе() соответствует таковому для функций присваивания. В конце концов, гер!асс () — это присваивание нового значения подстроке. 20.3.13.

Подстроки Функция зийз(г() позволяет задать подстроку, указав начальную позицию и длину; (егор!а<е<с!ат СЬ, с1ат Тг = сйаг (га(т<СЬ>, с1аяя А = нИоса(ог<СЬ» с!аяз Ьаз(с з(г(ие ( риЬ|с< // ... // адрес лодел(рокк Ьаяс я(г(ла яиЬз(г(яяе (уре < = О, я(е (уре и = проз) соля<( // ...

Функция яиЬя(г() — это способ прочитать часть строки. С другой стороны, функция гер1асе () позволяет выполнять запись в подстроку. Обе функции нуждаются в задании позиции (низкоуровневой) символа плюс число символов. В то же время](п(1() позволяет находить подстроки по их значениям. Вместе они позволяют нам находить подстроки, которые можно применять как для чтения, так и для записи: <еяр!а(е<с!азя Сй> с(ат Вояк яиЬя(ппл ( рий!(с: <уреде((урепате баас я<г(на<СЬ>::яге <уре яге <уре; Вазк вийя(г(пя(Ьаяс я(г(иа<СЬ>а з, з(зе (уре(', я(е <уре н) ( //я1!]..з]((н-1] Вояк вийя<((иа(Ьаяс ягшя<Сй>а з, соля Ьаз(с з(г(ие<СЬ>а я2) ( //з2 вз Ваяс вийя<((пе (Ьаяс я(ппа<СЬ>я з, сопя< Сй* р); //*р в( Ваяв зийя1пие орега(ог=(солт Ьаз(с з(пиа<СЬ>ь) ( Ваяс вийя<пни орега(ог= (сопи! Ваяс вийя<с(пе<Сй>а) Ваз(с вийя(г(ие орега(ог= (соня< Сй*); Ваяс яиЬза(ие орега(ог= (Сй) ( орега(ог Ьаяс з<г<ие<СЬ> () сопя< орега(ог соля Сй* () соня(( рпга<е < Ьаяс тплл<СЬ>* рт Глава 20.

Строки 7ОВ з(ге (уре рот яге (уре и( )( Реализация весьма тривиальна. Например: (етрйие<с(азз Сй> Виз(с яийяп4пе<СЬ>::Вая!с яийяитпд(йая!с яизпе<СЬ>г з, сопя Ьаяс я<ппд<СЬ>ь з2) : рз(ая), п(я2.1еп8(й Н ) ( ,иоя = я./!п<((з2) ( ) (етр(а(е<с(азз Сй> Воз(с яиймппд<СЬ>а Ваяс яиЬз(ппд<СЬ> <:прего(ог= (сопя(Ьаяс яппд<СЬ>г з) ( рз->«ерй<се (роя, и, з) ( геиип *(ЬВ< ) <етр1а(е<с!азя Сй> Ваяс яийзитпд<СЬ>:;орега(ог Ьая!с зитпд<СЬ> () сопя( ( гетгп Ьая(с яппд<СЬ> (*рз, роз, и) < ) Естественно, было бы еше интереснее, если бы Вийя(«(пд искал бы подстроки по шаблонному образцу (820.6[7)).

Характеристики

Тип файла
DJVU-файл
Размер
8,84 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6461
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее