SlideShare a Scribd company logo
Модуль 3: Основные понятия объектно-ориентированного
программирования.
Темы лекции: Строки. Потоки ввода-вывода.
Практическое задание: Ввод-вывод в С++.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 12
http://www.slideshare.net/IgorShkulipa 2
Строки в C++
http://www.slideshare.net/IgorShkulipa 3
Строки в C++
Для работы со строками в С++ используются классы
библиотеки STL.
Включаемый файл <string> содержит описания двух классов
строк, первый с символами типа char (однобайтовые
символы), второй с символами типа wchar_t (двухбайтовые
символы)
typedef basic_string <char> string;
typedef basic_string <wchar_t> wstring;
http://www.slideshare.net/IgorShkulipa 4
Доступ к элементу строки и добавление в конец строки
Доступ к элементу строки
⚫ at(size_type pos) const - доступ к символу в позиции pos;
⚫ reference at(size_type pos) - доступ к символу в позиции pos.
Если генерация исключения не нужна при некорректном аргументе pos, то
можно воспользоваться операцией [].
Добавление в конец строки
⚫ append(const basic_string& s) – добавление строки;
⚫ append(const basic_string& s, size_type pos, size_type npos) -
добавление части строки;
⚫ append(const char* s) - добавление C-строки;
⚫ append(const char* s, size_type n) - добавление части C строки;
⚫ append(size_type n, char c ) - добавление n символов c;
⚫ append(InputIterator first, InputIterator last) - добавление строки
заданной итераторами.
Методы возвращают ссылку на себя (*this). В качестве альтернативы
методам с одним аргументом можно воспользоваться операцией +=.
http://www.slideshare.net/IgorShkulipa 5
Присваивание данных строке
Присваивание данных строке
⚫ assign(const basic_string& s) – присваивание строки;
⚫ assign (const basic_string& s,size_type pos, size_type n) -
присв. части stl строки;
⚫ assign (const char* s) - присваивание C-строки;
⚫ assign (const char* s, size_type n) - присваивание части C-
строки;
⚫ assign (size_type n, char c) - присваивание n символов c;
⚫ assign (InputIterator first, InputIterator last) -
присваивание строки заданной итераторами.
Методы возвращают ссылку на себя (*this). В качестве альтернативы
методам с одним аргументом можно воспользоваться операцией =.
http://www.slideshare.net/IgorShkulipa 6
Методы сравнения строк
Сравнение строк
⚫ compare (const basic_string& str) - сравнение с stl строкой;
⚫ compare (size_type pos1, size_type n1, const basic_string&
str) const - сравнение с частью stl строки;
⚫ compare (size_type pos1,size_type n1,const basic_string&
str,size_type pos2,size_type n2) const - сравнение части stl
строки с частью stl строки;
⚫ compare (char* s) const - сравнение с C-строкой;
⚫ compare (size_type pos, size_type n1, char* s) const -
сравнение с C-строкой;
⚫ compare (size_type pos, size_type n1, char* s, size_type n2)
const - сравнение с C-строкой.
Методы сравнения возвращают следующие значения:
⚫ 0 - строки равны;
⚫ <0 - строка лексиграфически меньше со сравниваемой строкой;
⚫ >0 - строка лексиграфически больше со сравниваемой строкой.
В качестве альтернативы методам с одним аргументом можно
воспользоваться операциями ==, !=, < >, <=, >=.
http://www.slideshare.net/IgorShkulipa 7
Методы вставки данных
Вставка данных
⚫ insert (size_type pos1, const basic_string& s) - вставка stl
строки;
⚫ insert (size_type pos,const basic_string& s,size_type
pos2=0,size_type n=npos) - вставка части stl строки;
⚫ insert (size_type pos, const char* s) - вставка C-строки;
⚫ insert (size_type pos, const char* s, size_type n) - вставка
части C строки;
⚫ insert (size_type pos, size_type n, char c) - вставка
нескольких одинаковых символов.
Вставка данных, позиция вставки указана итератором:
⚫ insert (iterator p, char) - вставка символа;
⚫ insert (iterator p, size_type n, char c) - вставка нескольких
одинаковых символов;
⚫ insert (iterator p,InputIterator f,InputIterator l) - вставка
строки заданной итераторами.
Большинство методов возвращают ссылку на себя (*this).
http://www.slideshare.net/IgorShkulipa 8
Методы замены
Замена части строки
Замена участка строки, указанного позицией и размером:
⚫ replace (size_type pos,size_type n1, const basic_string& s) - замена stl
строкой;
⚫ replace (size_type pos1,size_type n1,const basic_string& str,size_type
pos2,size_type n2) - замена частью stl строкой;
⚫ replace (size_type pos, size_type n1, const char* s) - замена C строкой;
⚫ replace (size_type pos,size_type n1,const char* s,size_type n2) -
замена частью C строки;
⚫ replace (size_type pos, size_type n1, size_type n2, char c) - замена
несколькими символами.
Замена участка, указанного итераторами:
⚫ replace (iterator i1, iterator i2,const basic_string& str) - замена stl
строкой;
⚫ replace (iterator i1, iterator i2, const char* s) - замена C строкой;
⚫ replace (iterator i1, iterator i2, const char* s,size_type n) - замена
частью C строки;
⚫ replace (iterator i1, iterator i2, size_type n,char c) - замена
несколькими символами;
⚫ replace (iterator i1, iterator i2,InputIterator j1, InputIterator j2) -
замена строкой заданной итераторами.
Методы возвращают ссылку на себя (*this).
http://www.slideshare.net/IgorShkulipa 9
Методы поиска элементов строки
Поиск указанного элемента
⚫ find (const string& str) const - поиск stl строки;
⚫ find (const string& str, size_type idx) const - поиск stl строки
с указанной позиции;
⚫ find (const charT* s, size_type pos = 0) const - поиск C строки
с указанной позиции;
⚫ find (const charT* s, size_type pos, size_type n) const -
поиск подстроки с указанной позиции;
⚫ find (charT c, size_type pos = 0) const - поиск символа с
указанной позиции.
Также есть аналогичные методы rfind, делающие поиск справа налево.
Методы возвращают позицию найденного элемента или npos (обычно
равной -1).
http://www.slideshare.net/IgorShkulipa 10
Поиск символов, не входящих в строку
Поиск символа не входящего в строку
⚫ find_first_not_of (const basic_string& str, size_type
pos = 0) const;
⚫ find_first_not_of (const char* s,size_type
pos,size_type n) const;
⚫ find_first_not_of (const char* s,size_type pos=0)
const;
⚫ find_first_not_of (char c, size_type pos = 0) const.
Методы возвращают позицию найденного символа или npos (-1).
http://www.slideshare.net/IgorShkulipa 11
Поиск символов, входящих в строку
Поиск символа входящего в указанную строку:
⚫ find_first_of (const basic_string& str,size_type pos=0)
const;
⚫ find_first_of (const char* s,size_type pos,size_type n)
const;
⚫ find_first_of (const char* s, size_type pos=0) const;
⚫ find_first_of (charT c, size_type pos=0) const;
Методы возвращают позицию найденного символа или npos (-1).
http://www.slideshare.net/IgorShkulipa 12
Удаление символов из строки
Удаление символов строки
⚫ erase (size_type pos=0,size_type n=npos) - удаляет n
символов с указанной позиции;
⚫ erase (iterator p) - удаляет один символ в указанной
позиции;
⚫ erase (iterator f, iterator l) - удаляет символы с
позиции f по l.
http://www.slideshare.net/IgorShkulipa 13
Другие методы строковых классов
begin() - итератор на первый символа;
end() - итератор на позицию за последним символом;
rbegin() - итератор на последний элемент (для обратных
алгоритмов);
rend() - итератор на позицию перед первым элементом (для
обратных алгоритмов);
size() - размер строки;
substr(size_type pos = 0, size_type n=npos) const -
выделение подстроки;
c_str() - преобразование в C строку (возвращается указатель
на первый символ);
copy(char* buf, size_type buf_size) const - копировать
buf_size символов в буфер;
copy(char* buf, size_type buf_size, size_type pos) const -
копировать buf_size символов с указанной позиции в буфер;
http://www.slideshare.net/IgorShkulipa 14
Ввод/вывод в C++
http://www.slideshare.net/IgorShkulipa 15
Классы ввода/вывода в C++
Объекты, связанные с консолью cout и cin - это обычные объекты. А
операторы извлечения из потока >> и вставки в поток << -
перегруженные операции классов этих объектов.
Базовым классом является класс ios. У класса ios довольно много
производных классов.
cin и cout - объекты классов istream (от Input Stream - поток ввода) и
ostream (от Output Stream - поток вывода) соответственно. Именно
для этих классов перегружены операторы извлечения и вставки.
Наследниками istream и ostream являются ifstream (от Input File
Stream) и ofstream (от Output File Stream).
Кроме того, есть ещё один класс - fstream (от File Stream - фаловый
поток), в котором объединены возможности ifstream и ofstream.
fstream наследует одновременно и от istream, и от ostream.
http://www.slideshare.net/IgorShkulipa 16
Текстовые и бинарные файлы
Текстовый файл Двоичный файл
1. Содержимое
представлено в
двоичном виде с
использованием
кодировок.
1. При открытии мы
видим текст.
1. Файл разбит на
блоки для
кодирования одной
буквы.
1. Содержимое
представлено в
двоичном виде.
1. Файл не разбит на
фиксированные
блоки (разбит по 1
байту).
http://www.slideshare.net/IgorShkulipa 17
Создание текстового файла
Необходимо включить заголовочный файл fstream (классы ifstream и
ofstream)
Также нужно подключить заголовочный файл iostream (операторы
вставки и извлечения из потоков)
ofstream os("text.txt");
os << "Hello, World!";
os.close();
Конструктор класса ofstream принимает параметр - символьную строку
содержащую название файла, в который будет осуществляться вывод.
Затем потоковый объект используется точно также как и cout. Только
вывод будет осуществляться не в консоль, а в файл text.txt.
Когда поток открывает файл, то этот файл блокируется, и никто не
сможет получить к нему доступ. Для этого и необходим вызов метода
close - файл закрывается и разблокируется.
http://www.slideshare.net/IgorShkulipa 18
Чтение текстового файла
char a[6];
ifstream is("text.txt");
is >> a;
is.close();
is использует оператор извлечения из потока, точно также как и
объект cin.
Для массива a выделено на один байт больше количества букв в
слове, так как в этот массив включается так же и символ конца
файла.
http://www.slideshare.net/IgorShkulipa 19
Двоичный режим записи и чтения файлов
Конструкторы классов ifstream и ofstream могут принимать
второй параметр - набор флагов. Одним из флагов указывается
двоичный режим:
ofstream os(“binary.bin", ios::binary);
ifstream is(“binary.bin", ios::binary);
Для чтения и записи двоичных файлов используются методы read
и write
void ofstream::write (char*, long);
void ifstream::read (char*, long);
http://www.slideshare.net/IgorShkulipa 20
Режимы открытия файла
fstream file;
file.open(file, "параметры через |");
Параметры:
⚫ ios::in - открыть файл для чтения
⚫ ios::out - открыть для записи в начало файла
⚫ ios::app - открыть для дозаписи в конец файла
⚫ ios::ate - установить указатель в конец файла
⚫ ios::thrunc - очистить файл если он существует
⚫ ios::binary - открыть файл в бинарном формате
http://www.slideshare.net/IgorShkulipa 21
Строковые потоки
В библиотеке STL есть также класс stringstream (заголовочный
файл #include <sstream>), который позволяет связать поток
ввода-вывода со строкой.
Всё, что выводится в такой поток, добавляется в конец строки;
всё, что считывается из потока — извлекается из начала
строки.
stringstream ss;
int choice;
cin >> choice;
ss << “Your choice is ” << choice << “n”;
string strText = “Formatted string= ”;
strText += ss.str();
cout << strText;
http://www.slideshare.net/IgorShkulipa 22
Лабораторная работа №12. Ввод-вывод в С++.
Создать программу, выполняющую копирование файлов.
Реализовать меню для управления копированием:
⚫ Скопировать файл
⚫ Скопировать часть файла
⚫ Удалить файл
⚫ Создать новый файл

More Related Content

What's hot

Основы NumPy
Основы NumPyОсновы NumPy
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
Unguryan Vitaliy
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.
Unguryan Vitaliy
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
Theoretical mechanics department
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
Theoretical mechanics department
 
Python и его тормоза
Python и его тормозаPython и его тормоза
Python и его тормоза
Alexander Shigin
 
Основы SciPy
Основы SciPyОсновы SciPy
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
Theoretical mechanics department
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
Python Meetup
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
Roman Brovko
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
Sergey Schetinin
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
Mikhail Kurnosov
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
Mikhail Kurnosov
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.
Roman Brovko
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Technopark
 
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
 
List - списки
List - списки List - списки
List - списки
Unguryan Vitaliy
 
Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.
Roman Brovko
 

What's hot (20)

Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
 
Python и его тормоза
Python и его тормозаPython и его тормоза
Python и его тормоза
 
Основы SciPy
Основы SciPyОсновы SciPy
Основы SciPy
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4
 
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивами
 
List - списки
List - списки List - списки
List - списки
 
Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.
 

Viewers also liked

C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
Igor Shkulipa
 
Beckett Fanshop
Beckett  Fanshop Beckett  Fanshop
Beckett Fanshop
Ashley Williams
 
Production diary 5
Production diary 5Production diary 5
Production diary 5
Laila Jaleel
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
Igor Shkulipa
 
Advanced LinkedIn Techniques
Advanced LinkedIn TechniquesAdvanced LinkedIn Techniques
Advanced LinkedIn Techniques
James Weber
 
16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATENisha Thinisha
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
Igor Shkulipa
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
Natalia Camacho
 
Biotecnología
BiotecnologíaBiotecnología
Biotecnología
karolinadiaz2015
 
amazing animals
amazing animalsamazing animals
amazing animals
sosome
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
Igor Shkulipa
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
Ida Morán
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
Igor Shkulipa
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
Igor Shkulipa
 
Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15hebronnhwebmaster
 
power point of extra material about eye trauma
power point of extra material about eye traumapower point of extra material about eye trauma
power point of extra material about eye traumaEman Elnezami
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
Igor Shkulipa
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
Laila Jaleel
 

Viewers also liked (20)

C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Beckett Fanshop
Beckett  Fanshop Beckett  Fanshop
Beckett Fanshop
 
PRES Eve's Dream
PRES Eve's DreamPRES Eve's Dream
PRES Eve's Dream
 
Production diary 5
Production diary 5Production diary 5
Production diary 5
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Advanced LinkedIn Techniques
Advanced LinkedIn TechniquesAdvanced LinkedIn Techniques
Advanced LinkedIn Techniques
 
16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
Biotecnología
BiotecnologíaBiotecnología
Biotecnología
 
amazing animals
amazing animalsamazing animals
amazing animals
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
 
Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15
 
power point of extra material about eye trauma
power point of extra material about eye traumapower point of extra material about eye trauma
power point of extra material about eye trauma
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
 

Similar to C++ Базовый. Занятие 12.

Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Yandex
 
07 string
07 string07 string
07 string
pogromskaya
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
Evgenij Laktionov
 
Classes: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilderClasses: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilder
Alexey Bovanenko
 
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptxspolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
yanabondarieva
 
PascalABC.NET 2015-2016
PascalABC.NET 2015-2016PascalABC.NET 2015-2016
Python: ввод и вывод
Python: ввод и выводPython: ввод и вывод
Python: ввод и вывод
Theoretical mechanics department
 
Tricks Stl Container
Tricks Stl ContainerTricks Stl Container
Tricks Stl Container
corehard_by
 
tricks of Stl containers
tricks of Stl containerstricks of Stl containers
tricks of Stl containers
COMAQA.BY
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Javaphearnot
 
строковые величины
строковые величиныстроковые величины
строковые величиныmetodkopilka
 
Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...
Sergey Vasilyev
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SAST
Vladimir Kochetkov
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 

Similar to C++ Базовый. Занятие 12. (20)

лек7
лек7лек7
лек7
 
лек7
лек7лек7
лек7
 
лек8
лек8лек8
лек8
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
 
07 string
07 string07 string
07 string
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
Classes: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilderClasses: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilder
 
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptxspolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
 
PascalABC.NET 2015-2016
PascalABC.NET 2015-2016PascalABC.NET 2015-2016
PascalABC.NET 2015-2016
 
Python: ввод и вывод
Python: ввод и выводPython: ввод и вывод
Python: ввод и вывод
 
Tricks Stl Container
Tricks Stl ContainerTricks Stl Container
Tricks Stl Container
 
tricks of Stl containers
tricks of Stl containerstricks of Stl containers
tricks of Stl containers
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Java
 
строковые величины
строковые величиныстроковые величины
строковые величины
 
Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SAST
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 

C++ Базовый. Занятие 12.

  • 1. Модуль 3: Основные понятия объектно-ориентированного программирования. Темы лекции: Строки. Потоки ввода-вывода. Практическое задание: Ввод-вывод в С++. Тренер: Игорь Шкулипа, к.т.н. C++ Базовый. Занятие 12
  • 3. http://www.slideshare.net/IgorShkulipa 3 Строки в C++ Для работы со строками в С++ используются классы библиотеки STL. Включаемый файл <string> содержит описания двух классов строк, первый с символами типа char (однобайтовые символы), второй с символами типа wchar_t (двухбайтовые символы) typedef basic_string <char> string; typedef basic_string <wchar_t> wstring;
  • 4. http://www.slideshare.net/IgorShkulipa 4 Доступ к элементу строки и добавление в конец строки Доступ к элементу строки ⚫ at(size_type pos) const - доступ к символу в позиции pos; ⚫ reference at(size_type pos) - доступ к символу в позиции pos. Если генерация исключения не нужна при некорректном аргументе pos, то можно воспользоваться операцией []. Добавление в конец строки ⚫ append(const basic_string& s) – добавление строки; ⚫ append(const basic_string& s, size_type pos, size_type npos) - добавление части строки; ⚫ append(const char* s) - добавление C-строки; ⚫ append(const char* s, size_type n) - добавление части C строки; ⚫ append(size_type n, char c ) - добавление n символов c; ⚫ append(InputIterator first, InputIterator last) - добавление строки заданной итераторами. Методы возвращают ссылку на себя (*this). В качестве альтернативы методам с одним аргументом можно воспользоваться операцией +=.
  • 5. http://www.slideshare.net/IgorShkulipa 5 Присваивание данных строке Присваивание данных строке ⚫ assign(const basic_string& s) – присваивание строки; ⚫ assign (const basic_string& s,size_type pos, size_type n) - присв. части stl строки; ⚫ assign (const char* s) - присваивание C-строки; ⚫ assign (const char* s, size_type n) - присваивание части C- строки; ⚫ assign (size_type n, char c) - присваивание n символов c; ⚫ assign (InputIterator first, InputIterator last) - присваивание строки заданной итераторами. Методы возвращают ссылку на себя (*this). В качестве альтернативы методам с одним аргументом можно воспользоваться операцией =.
  • 6. http://www.slideshare.net/IgorShkulipa 6 Методы сравнения строк Сравнение строк ⚫ compare (const basic_string& str) - сравнение с stl строкой; ⚫ compare (size_type pos1, size_type n1, const basic_string& str) const - сравнение с частью stl строки; ⚫ compare (size_type pos1,size_type n1,const basic_string& str,size_type pos2,size_type n2) const - сравнение части stl строки с частью stl строки; ⚫ compare (char* s) const - сравнение с C-строкой; ⚫ compare (size_type pos, size_type n1, char* s) const - сравнение с C-строкой; ⚫ compare (size_type pos, size_type n1, char* s, size_type n2) const - сравнение с C-строкой. Методы сравнения возвращают следующие значения: ⚫ 0 - строки равны; ⚫ <0 - строка лексиграфически меньше со сравниваемой строкой; ⚫ >0 - строка лексиграфически больше со сравниваемой строкой. В качестве альтернативы методам с одним аргументом можно воспользоваться операциями ==, !=, < >, <=, >=.
  • 7. http://www.slideshare.net/IgorShkulipa 7 Методы вставки данных Вставка данных ⚫ insert (size_type pos1, const basic_string& s) - вставка stl строки; ⚫ insert (size_type pos,const basic_string& s,size_type pos2=0,size_type n=npos) - вставка части stl строки; ⚫ insert (size_type pos, const char* s) - вставка C-строки; ⚫ insert (size_type pos, const char* s, size_type n) - вставка части C строки; ⚫ insert (size_type pos, size_type n, char c) - вставка нескольких одинаковых символов. Вставка данных, позиция вставки указана итератором: ⚫ insert (iterator p, char) - вставка символа; ⚫ insert (iterator p, size_type n, char c) - вставка нескольких одинаковых символов; ⚫ insert (iterator p,InputIterator f,InputIterator l) - вставка строки заданной итераторами. Большинство методов возвращают ссылку на себя (*this).
  • 8. http://www.slideshare.net/IgorShkulipa 8 Методы замены Замена части строки Замена участка строки, указанного позицией и размером: ⚫ replace (size_type pos,size_type n1, const basic_string& s) - замена stl строкой; ⚫ replace (size_type pos1,size_type n1,const basic_string& str,size_type pos2,size_type n2) - замена частью stl строкой; ⚫ replace (size_type pos, size_type n1, const char* s) - замена C строкой; ⚫ replace (size_type pos,size_type n1,const char* s,size_type n2) - замена частью C строки; ⚫ replace (size_type pos, size_type n1, size_type n2, char c) - замена несколькими символами. Замена участка, указанного итераторами: ⚫ replace (iterator i1, iterator i2,const basic_string& str) - замена stl строкой; ⚫ replace (iterator i1, iterator i2, const char* s) - замена C строкой; ⚫ replace (iterator i1, iterator i2, const char* s,size_type n) - замена частью C строки; ⚫ replace (iterator i1, iterator i2, size_type n,char c) - замена несколькими символами; ⚫ replace (iterator i1, iterator i2,InputIterator j1, InputIterator j2) - замена строкой заданной итераторами. Методы возвращают ссылку на себя (*this).
  • 9. http://www.slideshare.net/IgorShkulipa 9 Методы поиска элементов строки Поиск указанного элемента ⚫ find (const string& str) const - поиск stl строки; ⚫ find (const string& str, size_type idx) const - поиск stl строки с указанной позиции; ⚫ find (const charT* s, size_type pos = 0) const - поиск C строки с указанной позиции; ⚫ find (const charT* s, size_type pos, size_type n) const - поиск подстроки с указанной позиции; ⚫ find (charT c, size_type pos = 0) const - поиск символа с указанной позиции. Также есть аналогичные методы rfind, делающие поиск справа налево. Методы возвращают позицию найденного элемента или npos (обычно равной -1).
  • 10. http://www.slideshare.net/IgorShkulipa 10 Поиск символов, не входящих в строку Поиск символа не входящего в строку ⚫ find_first_not_of (const basic_string& str, size_type pos = 0) const; ⚫ find_first_not_of (const char* s,size_type pos,size_type n) const; ⚫ find_first_not_of (const char* s,size_type pos=0) const; ⚫ find_first_not_of (char c, size_type pos = 0) const. Методы возвращают позицию найденного символа или npos (-1).
  • 11. http://www.slideshare.net/IgorShkulipa 11 Поиск символов, входящих в строку Поиск символа входящего в указанную строку: ⚫ find_first_of (const basic_string& str,size_type pos=0) const; ⚫ find_first_of (const char* s,size_type pos,size_type n) const; ⚫ find_first_of (const char* s, size_type pos=0) const; ⚫ find_first_of (charT c, size_type pos=0) const; Методы возвращают позицию найденного символа или npos (-1).
  • 12. http://www.slideshare.net/IgorShkulipa 12 Удаление символов из строки Удаление символов строки ⚫ erase (size_type pos=0,size_type n=npos) - удаляет n символов с указанной позиции; ⚫ erase (iterator p) - удаляет один символ в указанной позиции; ⚫ erase (iterator f, iterator l) - удаляет символы с позиции f по l.
  • 13. http://www.slideshare.net/IgorShkulipa 13 Другие методы строковых классов begin() - итератор на первый символа; end() - итератор на позицию за последним символом; rbegin() - итератор на последний элемент (для обратных алгоритмов); rend() - итератор на позицию перед первым элементом (для обратных алгоритмов); size() - размер строки; substr(size_type pos = 0, size_type n=npos) const - выделение подстроки; c_str() - преобразование в C строку (возвращается указатель на первый символ); copy(char* buf, size_type buf_size) const - копировать buf_size символов в буфер; copy(char* buf, size_type buf_size, size_type pos) const - копировать buf_size символов с указанной позиции в буфер;
  • 15. http://www.slideshare.net/IgorShkulipa 15 Классы ввода/вывода в C++ Объекты, связанные с консолью cout и cin - это обычные объекты. А операторы извлечения из потока >> и вставки в поток << - перегруженные операции классов этих объектов. Базовым классом является класс ios. У класса ios довольно много производных классов. cin и cout - объекты классов istream (от Input Stream - поток ввода) и ostream (от Output Stream - поток вывода) соответственно. Именно для этих классов перегружены операторы извлечения и вставки. Наследниками istream и ostream являются ifstream (от Input File Stream) и ofstream (от Output File Stream). Кроме того, есть ещё один класс - fstream (от File Stream - фаловый поток), в котором объединены возможности ifstream и ofstream. fstream наследует одновременно и от istream, и от ostream.
  • 16. http://www.slideshare.net/IgorShkulipa 16 Текстовые и бинарные файлы Текстовый файл Двоичный файл 1. Содержимое представлено в двоичном виде с использованием кодировок. 1. При открытии мы видим текст. 1. Файл разбит на блоки для кодирования одной буквы. 1. Содержимое представлено в двоичном виде. 1. Файл не разбит на фиксированные блоки (разбит по 1 байту).
  • 17. http://www.slideshare.net/IgorShkulipa 17 Создание текстового файла Необходимо включить заголовочный файл fstream (классы ifstream и ofstream) Также нужно подключить заголовочный файл iostream (операторы вставки и извлечения из потоков) ofstream os("text.txt"); os << "Hello, World!"; os.close(); Конструктор класса ofstream принимает параметр - символьную строку содержащую название файла, в который будет осуществляться вывод. Затем потоковый объект используется точно также как и cout. Только вывод будет осуществляться не в консоль, а в файл text.txt. Когда поток открывает файл, то этот файл блокируется, и никто не сможет получить к нему доступ. Для этого и необходим вызов метода close - файл закрывается и разблокируется.
  • 18. http://www.slideshare.net/IgorShkulipa 18 Чтение текстового файла char a[6]; ifstream is("text.txt"); is >> a; is.close(); is использует оператор извлечения из потока, точно также как и объект cin. Для массива a выделено на один байт больше количества букв в слове, так как в этот массив включается так же и символ конца файла.
  • 19. http://www.slideshare.net/IgorShkulipa 19 Двоичный режим записи и чтения файлов Конструкторы классов ifstream и ofstream могут принимать второй параметр - набор флагов. Одним из флагов указывается двоичный режим: ofstream os(“binary.bin", ios::binary); ifstream is(“binary.bin", ios::binary); Для чтения и записи двоичных файлов используются методы read и write void ofstream::write (char*, long); void ifstream::read (char*, long);
  • 20. http://www.slideshare.net/IgorShkulipa 20 Режимы открытия файла fstream file; file.open(file, "параметры через |"); Параметры: ⚫ ios::in - открыть файл для чтения ⚫ ios::out - открыть для записи в начало файла ⚫ ios::app - открыть для дозаписи в конец файла ⚫ ios::ate - установить указатель в конец файла ⚫ ios::thrunc - очистить файл если он существует ⚫ ios::binary - открыть файл в бинарном формате
  • 21. http://www.slideshare.net/IgorShkulipa 21 Строковые потоки В библиотеке STL есть также класс stringstream (заголовочный файл #include <sstream>), который позволяет связать поток ввода-вывода со строкой. Всё, что выводится в такой поток, добавляется в конец строки; всё, что считывается из потока — извлекается из начала строки. stringstream ss; int choice; cin >> choice; ss << “Your choice is ” << choice << “n”; string strText = “Formatted string= ”; strText += ss.str(); cout << strText;
  • 22. http://www.slideshare.net/IgorShkulipa 22 Лабораторная работа №12. Ввод-вывод в С++. Создать программу, выполняющую копирование файлов. Реализовать меню для управления копированием: ⚫ Скопировать файл ⚫ Скопировать часть файла ⚫ Удалить файл ⚫ Создать новый файл