Главная » Просмотр файлов » Г. Шилтд - Самоучитель C++ (DJVU)

Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 70

Файл №1114955 Г. Шилтд - Самоучитель C++ (DJVU) (Г. Шилтд - Самоучитель C++ (DJVU)) 70 страницаГ. Шилтд - Самоучитель C++ (DJVU) (1114955) страница 702019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Например, рассмотрим следующий фрагмент программы: онат в1 ~во), в~ ~во), аз ~во); 51 = "Газ"; // не допускается ев = "два"; ух не допускаетсн вз =. В1 -~ в2; // ошибка, снова не допускается Глава 14. Библиотека стандартных шаблонов 463 Как показано в комментариях, в С++ нельзя использовать оператор присваивания, чтобы дать символьному массиву новое значение (за исключением инициализации), а для конкатенации двух строк нельзя использовать оператор сложения. Эти операции приходится выполнять с помощью показанных ниже библиотечных функций: "раз") у Ялввн ) а1); в2)т а~ксру (вг, агксру (в2, вСтсру)вэ, еттсру (еЗ, Поскольку оканчивающиеся нулем символьные массивы по своей сути технически не являются типами данных, к ним нельзя применять операторы С++.

Это приводит к тому, что даже самые элементарные операции со строками становятся чрезвычайно запутанными. Невозможность использования стандартных операторов С++ для работы с оканчивающимися нулем символьными массивами и стала основной причиной разработки стандартного строкового класса. Вспомните, когда вы в С++ определяете класс, вы определяете новый тип данных, который может быть полностью интегрирован в среду программирования С++. Само собой это означает, что относительно нового класса можно перегружать операторы.

Таким образом, благодаря добавлению в С++ стандартного класса з1ппя, становится возможным обрабатывать строки точно таким же образом, каким обрабатываются данные других типов, а именно с помощью операторов. Имеется, однако, и еще один довод в пользу использования стандартного класса з1ппя — это обеспечение безопасности. Неопытный или неосторожный программист может очень легко выйти за границы массива, в котором хранится оканчивающаяся нулем строка.

Например, рассмотрим стандартную функцию копирования строк я$гсруо. В этой функции совершенно отсутствуют какие бы то ни было атрибуты, предназначенные для контроля границ целевого массива. Если в исходном массиве оказывается больше символов, чем может поместиться в целевом массиве, вполне возможна (и даже весьма вероятна) программная или даже системная ошибка. Как вы в дальнейшем увидите, стандартный класс з)пппб предотвращает саму возможность возникновения подобных ошибок. Итак, для включения в С++ стандартного класса з1ппя имеется три довода: совместимость (теперь строка становится типом данных), удобство (можно использовать стандартные операторы С++) и безопасность (границы массива не нарушаются).

Запомните, что это не доводы в пользу отказа от обычных, оканчивающихся нулем массивов. Они остаются наиболее эффективным способом реализации символьных строк. Тем не менее, если при создании приложения скорость выполнения программы не является доминирующим фактором, новый класс з1ппя предоставляет вам безопасный и полностью интегрированный в среду программирования С++ способ обработки строк.

Самоучитель С++ явгЫсу (); в~кила(аопат. с1 е с *сарова); вкк~вд (аоавс с~-Шд ааврсаа) В первой форме создается пустой объект типа а(г)ия. Во второй форме— объект типа а(ппя из оканчивающейся нулем строки, обозначенной указателем строка. Эта форма обеспечивает преобразование из оканчивающейся нулем строки в объект типа а(г!пд. В третьей форме объект типа а(пппб создается из другого объекта типа а(ппя. Ниже перечислена часть операторов, допустимых при работе с объектами типа а(пвя: Оператор Значение Присваивание Конкатенация Присваивание с конкатенацией Равенство Неравенство Меньше Меньше или равно Больше Больше или равно Индекс Вывод В << Ввод Хотя строковый класс традиционно не считают частью библиотеки стандартных шаблонов, тем не менее, это один из определенных в С++ классов- контейнеров. Это, в частности, означает, что он поддерживает описанные в предыдущем разделе алгоритмы.

Кроме этого, для обработки строк имеются дополнительные возможности. Чтобы получить доступ к классу а(гш~, в программу следует включить заголовок <а(г)аК>. Класс а(пщ очень велик, в нем имеется множество конструкторов и функций-членов. Помимо этого многие функции-члены имеют массу перегруженных форм. По этой причине в одной главе невозможно рассказать о всех членах класса а(пппб. Вместо этого мы исследуем только некоторые, основные его возможности.

После получения базовых знаний о работе класса а1гшц в целом, все остальное вы сможете легко понять самостоятельно. В классе а(пня поддерживается несколько конструкторов. Ниже представлены прототипы трех из них, которые чаще всего используются: Глана 14. Библиотека стаидартнык шаблонов 4б5 Указанные операторы позволяют использовать объекты типа в1пщ в обычных выражениях и отказаться от вызовов специализированных функций, например, функций й(гсруо или в(гса10.

Как правило, объекты типа в1г(щ в выражениях можно записывать вместе с обычными, оканчивающимися нулем строками. Например, объект типа в1г(щ можно присвоить оканчивающейся нулем строке. Оператор + можно использовать для конкатенации объекта типа в(г(щ с другим объектом типа в1г(щ или для конкатенации объекта типа в1г(щ со строкой в стиле С. Поддерживаются следующие варианты: ыг.гЬц .~- ыг.пгпд Бспъпд ~- С-вски С-аггьпд в. всп(пд Кроме этого, оператор + можно использовать для присоединения одиночного символа к концу строки.

В классе в(г(щ определена константа врой, обычно равная -1. Эта константа отражает максимально возможную длину строки. Несмотря на то, что большая часть операций над строками может быть выполнена с помошью строковых операторов, для некоторых наиболее сложных или необычных операций нужны функции — члены класса в1пщ. Хотя их слишком много для одной главы, о некоторых наиболее полезных здесь будет рассказано. Чтобы присвоить одну строку другой используется функция авяяво. Ниже представлены две основные формы этой функции: вГ.г(пд йаввйяв (ооовг.

яГ.гзпд йобввхе сорока, а4.хе Варе начало, вз.хе Гчре чаоао) в~хыьй( йаввхдв(ооовг. с11аг всвЗооха, в~хе Ьуре число); В первой форме несколько символов, количество которых равно параметру число из объекта ебйект строка, начиная с индекса начало, присваиваются вызывающему объекту. Во второй форме вызывающему объекту присваивается первые несколько символов, количество которых равно параметру число из оканчивающейся нулем строки строка.

В обоих случаях функция возвращает ссылку на вызываюший объект. Очевидно, что для присваивания одной целой строки другой гораздо проще использовать оператор =. Функция ааиапО может понадобиться только при присваивании части строки. Присоединить часть одной строки к другой можно с помощью функции- члена аррелдО. Ниже представлены две основные формы этой функции: втг(пн()аррепс((оопвЕ. в1г(пц йобвеав схрона, вХхе Фуре начало, а~хе Ечре число) вгг(пи йарреаЫ(осовев сваг всвроха, вйхе ~ура число); В первой форме несколько символов, количество которых равно параметру число из объекта обмхт апрока, начиная с индекса начало присоединяются к вызывающему объекту. Во второй форме к вызывающему объекту присое- Самоучитель С++ диняются первые несколько символов, количество которых равно параметру число, из оканчиваюшейся нулем строки строка.

В обоих случаях функция возвращает ссылку на вызываюший объект. Очевидно, что для присоединения одной целой строки к другой гораздо проще использовать оператор +. Функция аррепдО может понадобиться только при присоединении части строки. С помощью функций 1пиег(о и гер1асео можно соответственно вставлять или заменять символы в строке. Ниже представлены прототипы основных форм этих функций: вгг(пК ььпвеге(вкге суре начало, сопвг вгг(пд ьобъехт строка) в(г(п($, $$$пвег((в(хе (уре начало, сопи( вельд ьобъект строка, вьве Еуре качало аотаихи, вьве Еуре число); Мг$п( йгер(асс (в1ве Туре иачало, вкве Еуретесло, сопи( в(г(пп ьобъехт отрока) в(г(пп Г(гер(асе (в1ве еурв качало, вкке суре иои комер, сопи( в(г(пп г объект отрока, вые Фуре начало замени, в(хе гу(зе число вамапи); В первой форме функции шзег(о объект а«век«$ аирошг вставляется в вызывающую строку по индексу начало.

Во второй форме функции 1паег(9 число символов из объекта объект строка, начиная с индекса качала вставки, вставляется в вызывающую строку по индексу начало. В первой форме функции гер1асео число символов, начиная с индекса начало, заменяется в вызывающей строке объектом ойект е)про«и. Во второй форме функции гер1асео в вызывающей строке заменяется «ех число символов, начиная с индекса начало, при этом из объекта одежек«$ сшрока берутся число заме«и символов, начиная с индекса «а«ало замени. В обоих случаях функция возвращает ссылку на вызывающий объект.

Удалить символы из строки можно с помощью функции егаяео. Ниже показана одна из форм этой функции: втхллд Г(егаве(в(ке Фуре начало = О, вкке Фуре число = пров) Функция удаляет число символов из вызывающей строки, начиная с индекса начало. Возвращаемым значением является ссылка на вызывающий объект. В классе я(пщ поддерживается несколько функций-членов, предназначенных для поиска строк. Среди них имеются функции 11п(1() и г(шдЦ. Ниже показаны прототипы основных версий этих функций: аЗ.ве суре Йпй (сопи( в(г(пп ьобъект строка, в(,ве Еуре аачало = 0) сопи($ вьве фуре кй$зв((оопвФ.

в(г(пв( йобъект отрока, в~хе Фуре начало = прок) сопвг; Глава 14. Библиотека стандартных шаблонов Начиная с индекса начало функция Г1пйО ищет в вызывающей строке первое совпадение со строкой, содержащейся в объекте обмкт строка. Если искомая строка найдена, функция Г)пйО возвращает индекс вызывающей строки, соответствующий найденному совпадению. Если искомая строка не найдена, функция Г)пПО возвращает значение пров. В противоположность функции Гп)ЙО, функция г11пбо, начиная с индекса начало, но в обратном направлении, ищет в вызывающей строке первое совпадение со строкой, содержащейся в объекте одпекит сорока.

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

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

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

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