Потоковые классы Потоки – последовательности байт, связанные с файлом либо с устройством ввода/вывода. Потоки по направлению обмена делятся на входные,

Презентация:



Advertisements
Похожие презентации
Форматирование Библиотека потоков С++ предусматривает три способа управления форматов выходных данных: вызов форматирующих функций-элементов использование.
Advertisements

Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
1 Программирование на языке Си++. 2 Модуль 4. ПЕРЕГРУЗКА ОПЕРАЦИЙ Методы преобразования. Классы потоков Си++ Операции замещения и вставки Ввод/вывод в.
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Потоки Язык C++ не обеспечивает средств для ввода/вывода Ему это и не нужно; такие средства легко и элегантно можно создать с помощью самого языка Традиционно.
Лекция 11 Файлы. Точного определения файла не существует. Файлом может быть: Объект файловой системы (файлы, папки и т.д.) Устройство ввода/вывода (клавиатура,
Потоки (файлы) Функции и типы для работы с потоками в стиле С описаны в модуле stdio.h. В отличие от Паскаля в С с потоком не связан тип данных. Поток.
Стандартная библиотека шаблонов (STL) Контейнеры –структуры для хранения данных. Алгоритмы – шаблонные универсальные функции для обработки данных Итераторы.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
ТЕКСТОВЫЕ ФАЙЛЫ Turbo Pascal 7.0. Операции с текстовыми файлами Выделение буфера обмена Установка связи Открытие файла Чтение из файла Запись в файл Закрытие.
Работа с файлами FILE НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
Работа с файлами.. Процедура Assign(var f; name : String); Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции.
Глава 9. ВВОД-ВЫВОД ДАННЫХ И ФАЙЛОВАЯ СТРУКТУРА Логический и физический файлы Типы файловой переменной Общие процедуры работы с файлами Текстовые файлы.
Нетипизированный файл рассматривается в Паскале как совокупность символов или байтов. Выбор char или byte не играет никакой роли, важен лишь объем занимаемых.
Множества значений или переменных с одним общим именем называются структурированными типами. По способу организации и типу компонентов выделяют: 1. Массивы.
Программирование в C++ Преподаватель Колотова Людмила Павловна.
Познакомиться с основными принципами работы с символьными величинами Научиться применять процедуры и функции для их обработки.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Программирование на языке Паскаль Работа с файловой системой.
Файлы - именованная область внешней памяти ЭВМ, хранящая совокупность данных. Файл.
Транксрипт:

Потоковые классы Потоки – последовательности байт, связанные с файлом либо с устройством ввода/вывода. Потоки по направлению обмена делятся на входные, выходные и двунаправленные. По виду устройств, с которыми работает поток выделяют стандартные (передача от клавиатуры и на экран), файловые и строковые (работа с массивами символов).

Иерархия потоков IOS istreamostream iostream ifstream fstream ofstream

Флаги форматирования Определены в классе IOS left/right, dec/oct/hex, uppercase, scientific/fixed и др. Для установки имеется метод setf, для сброса – unsetf. Пример: cout.setf(ios::left); cout

Методы класса IOS int ios::width() – возвращает значение ширины поля вывода; int ios::width(int a) – устанавливает ширину поля вывода; int ios::precision() – возвращает точности при выводе вещественных чисел; int ios::width(int a) – устанавливает ширину поля вывода; char ios::fill() – символ заполнения char ios::fill(char c) – установка символа заполнения

Манипуляторы Манипуляторы – функции, которые включаются в цепочки ввода и вывода для форматирования данных. Манипуляторы определены в заголовочном файле iomanip. Основные манипуляторы endl/ends – символ новой строки/нулевой символ; dec/oct/hex – вывод чисел в десятичной/ восьмеричной/ шестнадцатиричной системе счисления; resetiosflags(long)/setiosflags(long) – сброс/ установка флагов; setw(int) – установка ширины вывода; setprecision(int) – установка количества цифр в дробной части вещественного числа; setfill(int) – установка символа-заполнителя. Пример: cout

Класс iostream Содержит методы для ввода данных >> - форматированный ввод данных всех типов get(с)– считывает символ; get (buf, num, lim=\n) – считывает num-1 символ (или пока не встретится lim) и копирует их в строку buf. Затем к строке дописывается символ \0. getline(buf, num, lim=\n) – аналогична get, но в строку копируется и символ lim. ignore(num=1,lim=EOF) – пропускает num символов. peek() – возвращает символ без удаления его из потока read(buf,num) – считывает num символов в строку buf; readsome(buf,num) – аналогично read, но возвращает количество считанных символов; seekg(pos) – устанавливает указатель чтения на pos; tellg() – возвращает текущую позицию чтения потока

Класс ostream В классе ostream определены методы для вывода:

Стандартные потоковые объекты cin – ввод cout – вывод cerr – вывод сообщений об ошибках clog – вывод в журнал cerr и clog всегда выводят на экран, но первый не использует буфер вывода.

Ошибки потоков В базовом классе ios определено поле state, которое представляет собой состояние потока в виде совокупности битов: enum io_state { goodbit = 0x00, eofbit = 0x01. failbit = 0x02, badbit = 0x04, hardfail = 0x08}; int rdstate() возвращает текущее состояние потока; int eof() возвращает ненулевое значение, если установлен флаг eofbit; int fall() возвращает ненулевое значение, если установлен один из флагов failbit, badbit или hardfail; int bad() возвращает ненулевое значение, если установлен один из флагов badbit или hardfail; int good() возвращает ненулевое значение, если сброшены все флаги ошибок; void clear(int = 0) параметр принимается в качестве состояния ошибки, при отсутствии параметра состояние ошибки устанавливается 0; operator void*() возвращает нулевой указатель, если установлен хотя бы один бит ошибки; operator ! () возвращает ненулевой указатель, если установлен хотя бы один бит ошибки.

Обработка ошибок //Проверка флага if (cin.rdstate() & ios::failbit) … //Сбросить флаг cin.rdstate(cin.rdstate() & ~ios::failbit)… //Установить флаг cin.rdstate(cin.rdstate() | ios::failbit)… //проверка состояния потока while (cin >> x) {}

Файловые потоки ifstream – входной, ofstream – выходной, fstream – двунаправленный. Потоковые классы имеют конструктор без параметров, который создает объект не связывая его с файлом и конструктор с двумя параметрами: fstream(const char* name, int mode) открывающий файл с именем name в режиме mode. Если режим не указан, то файлы откроются по умолчанию в текстовом режиме.

Режимы открытия файлов Режим задается битовыми масками, заданными в классе ios. ios::in – открыть для чтения, ios::out - открыть для записи, ios::ate – встать в конец файла, ios::app – открыть файл для добавления, ios::trunc – удалить файл, если он существует, ios::nocreate – не создавать файл, ios::noreplace – не перезаписывать файл, ios::binary – двоичный режим. Например fstream f(input.txt, ios::in|ios::binary); открывает файл для чтения в двоичном режиме. Для открытия файла можно использовать метод open с параметрами как у соответствующего конструктора. Закрывается файл методом close() или автоматически при вызове деструктора.

Перегрузка операций ввода и вывода class stack { … friend ostream& operator =0; i--) out

Строки Стандартная библиотека C++ включает тип string (строки) в модуле string. Класс string автоматически управляет памятью для строк, определяет большое количество удобных операций и методов.

Конструкторы и присваивание строк string() string( const char*) string (string&) string s1,s2,s3="Hi!"; s1="Hello"; s2=s1;

Операции = присваивание +, += сцепление строк >, =, >

Методы (характеристики строки) length(), size() – длина строки max_size() – максимальная длина строки capacity() – объем памяти, занимаемый строкой empty() - истина, если строка пустая

Методы (присваивание и добавление) Присваивание строки или части строки assign(const string& s) assign(const string& s, int pos, int n) assign(const char *s, int n) Добавление строки или части строки append(const string& s) append(const string& s, int pos, int n) append(const char *s, int n)

Методы (вставка и удаление) Вставка строки или части строки insert( int pos1, const string &s) insert( int pos1, const string &s, int pos2, int n) insert( int pos, const char *s, int n) Удаление части строки erase (int pos = 0, int n = npos) Очистка строки clear()

Методы (замена, обмен, выделение части строки) Замена части строки replace(int pos1, int n1, const string& s) replace(int pos1, int n1, const string& s, int pos2, int n2) replace(int pos1, int n1, const char* s, int n2) Обмен строк swap (string &s) Выделение части строки string substr (int pos = 0, int n = npos) Преобразование строки в char* char* c_str ()

Методы (поиск и сравнение строк) int find( const string&s, int pos = 0) – левое вхождение int rfind( const string&s, int pos = npos) – правое вхождение int compare (const string&s) int compare (int pos1, int n1, const string&s) int compare (int pos1, int n1, const string&s, int pos2, int n2)