- •1 Задание
- •2 Требования к реализации
- •3 Методические указания
- •3.1 Файловые потоки ввода-вывода
- •1) Открытие потока
- •2) Закрытие потока
- •3) Ввод/вывод в поток
- •4) Функции позиционирования
- •3.2 Работа со строками
- •Функции работы со строками
- •1) Определение длины строк
- •2) Обращение строк
- •3) Поиск символов
- •3) Поиск подстрок
- •2) Копирование строк
4) Функции позиционирования
Операции ввода/вывода выполняются начиная с текущей позиции потока, определяемой положением (значением) указателя потока. Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия a ,a+) и изменяется автоматически после каждой операции ввода/вывода. Текущее положение указателя можно получить с помощью функций ftell и fgetpos и задать явным образом с помощью функций fseek, fsetpos и rewind. Эти функции нельзя использовать для стандартных потоков.
long int ftell(FILE *f);
Функция возвращает текущую позицию в файле, связанном с потоком f, как длинное целое. В случае ошибки она возвращает –1.
int fgetpos(FILE *f, fpos_t *pos);
Функция возвращает текущую позицию в файле, связанном с потоком f, и копирует значение по адресу pos. Это значение позднее может использоваться функцией fsetpos. Возвращаемое значение имеет тип fpos_t.
int fseek(FILE *f, long off, int org);
Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию off, отсчитываемую от значения org, которое должно быть равно одной из трех констант, определенных в <stdio.h>:
SEEK_CUR ( =1 )— от текущей позиции указателя;
SEEK_END ( =2 )— от конца файла;
SEEK_SET ( =0 )— от начала файла.
Функция возвращает 0, если указатель текущей позиции в файле успешно изменен, и отличное от 0 значение в противном случае.
int fsetpos(FILE *f, const fpos_t *pos);
Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию *pos, предварительно полученную с помощью функции fgetpos.
void rewind(FILE *f);
Функция очищает флаги ошибок в потоке f и устанавливает текущую позицию на начало файла.
Функции позиционирования позволяют провести вывод непосредственно после ввода, не закрывая файл. Для этого их записывают между функциями ввода и вывода. Однако рекомендуется всегда явным образом закрывать потоки, открытые для записи, чтобы избежать потери данных.
3.2 Работа со строками
Как и в ANSI С, для представления символьных строк в C++ не существует специального строкового типа. Вместо этого строки в C++ представляются как массивы элементов типа char, заканчивающиеся терминатором строки - символом с нулевым значением ('\0').
Объявление строкового массива
char St[7];
// Объявление и инициализация строки:
char St[] = "Строка";
// что равносильно:
char St[] = {'С','т','р','о','к','а','\0'};
Функции работы со строками
Большинство функций работы со строками содержится в библиотеке string.h.
1) Определение длины строк
Выполняется с помощью функции strlen () в заголовочном файле string.h. Синтаксис этой функции имеет вид:
size_t strlen(const char* string)
Данная функция в качестве единственного параметра принимает указатель на начало строки string, вычисляет количество символов строки и возвращает полученное беззнаковое целое число (size_t). Функция strlen () возвращает значение на единицу меньше, чем отводится под массив по причине резервирования места для символа '\0'.
Следующий фрагмент демонстрирует использование функции strlen ():
char St[] = "abcdef";
unsigned int i;
i = strlen(St);