Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » 7. Строковые классы Си++. Потоки ввода-вывода

7. Строковые классы Си++. Потоки ввода-вывода (Семинары)

PDF-файл 7. Строковые классы Си++. Потоки ввода-вывода (Семинары) Информатика (4436): Семинары - 2 семестр7. Строковые классы Си++. Потоки ввода-вывода (Семинары) - PDF (4436) - СтудИзба2019-04-28СтудИзба

Описание файла

Файл "7. Строковые классы Си++. Потоки ввода-вывода" внутри архива находится в папке "Семинары". PDF-файл из архива "Семинары", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Кафедра Компьютерных методов физики: программирование, первый курс, второй семестрЯзык программирования Си++Иванов А.П., Князева О.С.Семинар 7. Строковые классы Си++. Потоки вводавывода.1. Строковые классы Си ++Строковый шаблонный класс STL и его наиболее употребимые специализации(инстанцирования) определены в заголовочном файле <string>. Предназначен этот класс,главным образом, для удобной работы с текстовыми строками, однако, так как этот классшаблонный, то он может использоваться и для реализации строк, состоящих не только изсимволов типа char.Конечно, что-то похожее можно было бы реализовать и на основе vector<char>, однако,реализация отдельного шаблона позволила решить следующие задачи:расширенный набор функций, аналоги которых были определены в языке Си:поиск, сравнение, копирование строк и т.п.;более экономная реализация, позволяющая избежать лишних копирований иаллокаций памяти по сравнению с классом vector (тактика copy-on-write).Основной шаблонный класс, в котором сосредоточена вся функциональность:template <class CharType,class Traits=char_traits<CharType>,class Allocator=allocator<CharType>>class basic_string;Важнейший параметр шаблона – первый, он определяет, какой тип будет сохраняться вданном контейнере.

Два других параметра имеют значения по умолчанию и, как правило,задаются явно только в очень специальных случаях.Определения производных типов (специализация)stringспециализация basic_string<char>, представляющая собой строку изобычных символов.wstringспециализация basic_string<wchar_t>, представляющая собой строку изобычных символов в двухбайтовой кодировке Unicode.ОператорыЧасть операторов реализована как внеклассовые шаблонные функции, а другая часть – какчлены класса basic_string.operator[]Возвращает ссылку (которой можно присваивать значение) на символстроки, имеющий указанный номер по порядку от начала.operator=Оператор присваивания строке, имеет несколько разных реализаций по14.11.20111Кафедра Компьютерных методов физики: программирование, первый курс, второй семестртипу аргумента: присваивание другой строки, одиночного символа и листроки языка Си типа char*.operator+operator+=Добавление второй строки в конец первой.

Аналогично операторуприсваивания – допускает аргументы разных типов (Си++ строка,Си строка, одиночный символ).operator!=operator==operator<operator<=operator>operator>=Операторы сравнения двух строк.operator<<operator>>Операторы ввода и вывода строки в поток (например, cin или cout).Отдельная функцияgetlineПозволяет читать входной поток (такой, как cin) построчно, присваиваеточередную считанную строку указанной переменной:string s1;cout << "Enter a sentence:" << endl << flush;getline(cin,s1);Определения типов, встроенные в классiteratorconst_iteratorАналогично прочим STL-контейнерам, со строкой можнооперировать при помощи итераторов (обобщения указателей).nposСпециальный тип (эквивалентный значению целочисленной«минус единице»), предназначенный для сигнализации о неуспехепоиска в строке.Конструкторыbasic_stringКонструкторы, в зависимости от типа своего аргумента позволяютсоздать строку из строки Си, другой Си++ строки, одиночногосимвола или заданного их количества, а также – создать пустуюстроку.Member Functionssize, lengthВозвращают текущее количество символов в строке.emptyПроверка на пустую строку.resizereserve14.11.2011Изменение размера строки: в зависимости от соотношения старогои нового размеров либо уничтожаются лишние символы в концестроки, либо специально указываемый символ добавляется внужном количестве в конец строки..Резервирует размер внутреннего буфера строки не менее, чем до2Кафедра Компьютерных методов физики: программирование, первый курс, второй семестрcapacityуказанного количества символов.Возвращает текущий размер зарезервированного внутреннегобуфера строки, который может быть использован под сохранение еесимволов без вызова методов аллокации памяти.assignappendАналогично operator= и operator+= присваивают или дописываютв конец данной строки – другую строку, однако, в отличие отсоответствующих операторов, содержат по нескольку вариантов сдополнительнымиаргументами,позволяющимивыполнитькопирование только части строки.atКак operator[] возвращает ссылку на символ строки с заданнымномером, однако, в отличие от него выполняет строгую проверкуиндекса на попадание в диапазон допустимых значений ивыставляет исключительное состояние в случае неуспеха.beginendВозвращают итераторы для позиций первого символа и символа,находящегося за последним значащим символом строки.c_strМетодвозвращаетуказательтерминированную символом '\0'.dataАналогичный метод, возвращает указатель на массив символов,соответствующей текущей строке, но без обязательноготерминирования их символом '\0'.eraseУдаляет из строки отдельный символ или диапазон символов,начиная с указанной позиции и указанной длины.clearУничтожает все символы строки, делает ее пустой.compareЛексикографическое сравнение двух строк.copyКопирует указанный диапазон символов строки во внешний массивсимволов.insertВставляет в указанной позиции одиночный элемент или диапазонсимволов.push_backДобавляет указанный символ в конец строки.replaceЗаменяет указанный символ или диапазон символов в строке.substrИзвлекает из строки подстроку указанной длины, начиная суказанной позиции.findИщет в строке указываемую подстроку.find_first_not_ofИщет в строке символ, не являющийся ни одним из указанных.find_first_ofИщет в строке символ, совпадающий с одним из указанных.14.11.2011наобычнуюСи-строку,3Кафедра Компьютерных методов физики: программирование, первый курс, второй семестрfind_last_not_ofИщет в строке последний символ, который не совпадает ни с однимиз указанных.find_last_ofИщет в строке последний символ, совпадающий с одним изуказанных.rfindПроводит в строке поиск от конца к началу указанной подстроки.2.

Потоки ввода-выводаВ качестве альтернативы к стандартной библиотеке ввода-вывода <stdio.h>, язык Си++предлагает объектно-ориентированный потоковый ввод-вывод. Для использования этойвозможности необходимо подключить к исходному тексту программы файл <iostream>.Аналогом стандартных файлов ввода-вывода в Си (stdin,stdout,stderr) служат потокиcin, cout, cerr. Эти потоки являются объектами классов, производных от istream дляпотоков ввода и ostream для потоков вывода. Существует так же определение классаiostream для потока ввода-вывода.Для осуществления операций ввода-вывода нужно воспользоваться переопределеннымиоператорами >> для операции ввода и << для вывода.#include <iostream>void main() {int n;cout << "Hello, world!\n" << "Enter number: ";cin >> n;cout << "\nYou entered: " << n;}Операции ввода-вывода определены для всех базовых типов.

При этом используетсяформат «по умолчанию», когда для вывода, например, числа плавающей арифметикипечатается полностью его текстовое представление с некоторым фиксированным числомзначащих цифр.Операторы вывода определены в классе ostream следующим образом:class ostream : {//...................................................ostream& operator<< (char);ostream& operator<< (int);ostream& operator<< (long);ostream& operator<< (float);ostream& operator<< (double);ostream& operator<< (const char *);//...................................................}Каждый такой оператор возвращает ссылку на текущий поток вывода. Это даетвозможность сцеплять несколько операций вывода в один оператор языка, сохраняяестественный порядок: вывод параметров будет осуществляться слева направо.14.11.20114Кафедра Компьютерных методов физики: программирование, первый курс, второй семестрНе следует забывать, что данные операторы имеют стандартный приоритет языка Си.Следовательно иногда для корректной записи необходимы скобки:int a,b, mask = 0x0F;cout << a+b << (a & mask) << " Correct!";Поток ввода реализован аналогичным образом.Для того, чтобы обеспечить вывод типов данных, введенных пользователем, надоопределить для них оператор вывода, например, следующим образом:class CDate {private:int day, month, year;public:CDate( int day_in, int month_in, int year_in );//...........................friend ostream& operator<<(ostream& s, CDate& date);};//.......................ostream& operator<<(ostream& s, CDate& date) {return s << date.day << "." << date.month << "." << date.year-2000;}//.......................CDate today(08,05,2010);cout << "\nToday = " << today;Результат:Today = 08.05.10Форматирование выводаПо сравнению с функцией printf() базовые потоки предоставляют гораздо меньшевозможностей по форматированию вывода.

Основное форматирование осуществляется спомощью функций-манипуляторов входными потоками.Основные манипуляторы:// Вставка в поток символа конца строки '\n' и сброс потокаostream& endl(ostream&);// Вставка в поток символа null для окончания строкиostream& ends(ostream&);// Сброс потока, выводятся все символы из внутреннего буфера.ostream& flush(ostream&);// В потоке ввода будут пропущены все пробельные символы:// (' ','\n','\r','\t'...)istream& ws(istream &);Следующие манипуляторы имеют действие до тех пор, пока в данном потоке не будетприменен другой манипулятор, отменяющий его действие:// Установка режима десятичного вывода целых чиселios& dec(ios &);14.11.20115Кафедра Компьютерных методов физики: программирование, первый курс, второй семестр// Установка режима шестнадцатиричного вывода целых чиселios& hex(ios &);// Установка режима восьмиричного вывода целых чиселios& oct(ios &);Примеры применения манипуляторов:cout << "Следующая строка напечатается с новой строки: " << endl <<"Шестнадцатиричное число: " << hex << 256 <<" Снова десятичное: " << dec <<256;Результат:Следующая строка напечатается с новой строки:Шестнадцатиричное число: FF Снова десятичное: 256Заметим, что мы не вызывали функцию-манипулятор явно, а передали лишь указатель нанее.Дополнительные манипуляторы определены в файле <iomanip>:// Установка режима восьмиричного вывода целых чисел:smanip_int setfill(int _f);// Установка ширины поля.

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