Листинг 6.4. Двоичный режим

 

#include <iostream>

#include <fstream>

#include <string>

 

using namespace std;

 

//структура данных - запись;

struct Record

{

int number;

string name;

string surname;

};

 

int main (void)

{

Record rec1;

rec1.name = "Ivan";

rec1.surname = "Ivanov";

rec1.number = 1;

 

//двоичная запись в файл;

ofstream fout( "db.txt", ios::binary );

//запись с помощью reinterpret_cast;

fout.write( reinterpret_cast<char*>(&rec1), sizeof(Record) );

fout.close();

 

Record rec2;

 

//двоичное чтение из файла;

ifstream fin( "db.txt", ios::binary );

//чтение с помощью reinterpret_cast;

fin.read( reinterpret_cast<char*>(&rec2), sizeof(Record) );

fin.close();

 

cout << rec2.number << ". " << rec2.name << " " << rec2.surname << endl;

 

return 0;

}

 

Закрытие файлов может происходить автоматически, но если, например, два потока связаны с одним файлом, необходимо закрыть первый, перед тем, как будет открыт второй.

 

6.5. Упражнения

Выполнить следующие упражнения для файлов, имена которых переданы через аргументы командной строки.

 

1. Прочитать из первого файла последовательность целых чисел и записать сумму ее элементов во второй.

2. Создать структуру данных, содержащую поля имени, фамилии, отчества и даты рождения. Осуществить двоичный файловый ввод – вывод данной структуры.

3. В двух файлах заданы последовательности целых чисел. Четные числа из обоих последовательностей записать в первый файл, а нечетные во второй.

4. Дан файл, содержащий последовательность действительных чисел. Отсортировать по возрастанию положительные числа из данной последовательности и результат записать в данный файл.

5. Из файла, содержащего текст, удалить все повторяющиеся слова.

6. Обменять содержимое двух файлов местами.

7. Дан файл, содержащий последовательность целых чисел. Отсортировать по убыванию четные числа из данной последовательности и результат записать в новый файл.

8. В файле, содержащем последовательность целых чисел, записать все числа в обратном порядке в шестнадцатеричном представлении.

9. Прочитать из первого файла последовательность целых чисел и записать произведение ее элементов во второй.

10. Из первого файла, содержащего текст, удалить все слова, несодержащиеся во втором файле.

11. Из файла, содержащего текст, удалить самое длинное слово.

12. Дан файл, содержащий последовательность целых чисел. Отсортировать по возрастанию нечетные числа из данной последовательности и результат записать в данный файл.

13. В файле, содержащем текст, изменить на обратный порядок символов в каждом слове, при этом порядок слов оставить неизмененным.

14. Дан файл, содержащий последовательность действительных чисел. Отсортировать по убыванию отрицательные числа из данной последовательности и результат записать в новый файл.

15. В двух файлах заданы последовательности действительных чисел. Положительные числа из обоих последовательностей записать в первый файл, а отрицательные во второй.

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

17. Из файла, содержащего текст, удалить самое короткое слово.

18. В файле, содержащем текст, состоящем из букв латинского алфавита, заменить символы «i» и «j» на «1», «to» на «2», «fo» на «4» и «at» на «8».

19. Из первого файла, содержащего текст, удалить все слова, содержащиеся во втором файле.

20. Дан файл, содержащий текст. Выстроить лексикографически все слова, содержащиеся в файле, и результат записать во второй файл.

Ллитература

1. Б. Керниган, Д. Ритчи, «Язык программирования С»,

ISBN 5-7940-0045-7.

 

2. Б. Страуструп, «Дизайн и эволюция С++. Классика CS»,

ISBN 5-469-01217-4.

 

3. Б. Страуструп, «Язык программирования С++. Специальное издание»,

ISBN 5-7989-0226-2.

 

4. C. Липпман, Ж. Лажойе, «Язык программирования C++. Вводный курс»,

ISBN 5-7940-0070-8.

 

5. Николас А. Солтер, Скотт Дж. Клепер, «С++ для профессионалов»,

ISBN 5-8459-1065-X.

 

6. Лафоре, «Объектно ориентированное программирование в С++»,

ISBN 978-5-94723-302-5.