Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 24:

Решение задач на обработку файлов

< Лекция 23 || Лекция 24: 123 || Лекция 25 >

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

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <fstream> 
int _tmain(int argc, _TCHAR* argv[]){
  int n,i=1; 
  float s, sum=0.0;
  // Открываем входной файл для ввода данных
  ifstream infile("in.txt"); 
  // Открываем выходной файл для вывода данных
  ofstream outfile("out.txt"); 
  // Проверка корректности открытия входного файла
  if (!infile) {cout << "Файл не открыт.\n";} 
    else {
      infile >> n; //Считываем количество чисел
      while (i++<=n){
        infile >> s; //Считываем вещественные числа
        if (s>0) {
            sum+=s;
            outfile << s <<"\n"; 
            //Выводим положительные числа  
                 }
        }
        outfile << sum; //Выводим сумму в выходной файл
        // Закрываем файлы 
        infile.close();
        outfile.close(); 
        cout << "Запись в файл завершена"; 
      }
  system("pause");
  return 0;
}

Пример 2. Дан текстовый файл. Выведите в выходной файл длину наибольшей строки и все строки такой длины.

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <fstream> 
#include <string.h>
int _tmain(int argc, _TCHAR* argv[]){
  int maxlen=0, len; 
  char st[200],delim;
  //Связываем переменные с потоками
  ifstream infile; 
  ofstream outfile;
  // Открываем входной файл для ввода данных
  infile.open("in.txt"); 
  // Проверка корректности открытия входного файла
  if (!infile) {cout << "Файл не открыт.\n";} 
  else {
    //Поиск максимальной длины строк       
    while (!infile.eof()) {
      infile.getline(st,200,delim='\n');
      len=strlen(st); 
      if (len>maxlen) maxlen=len;
    }
    // Закрываем входной файл 
    infile.close();
  }
   //Открываем входной файл для ввода данных
   infile.open("in.txt"); 
   // Открываем выходной файл для вывода данных
   outfile.open("out.txt");
  // Проверка корректности открытия входного файла
  if (!infile) {cout << "Файл не открыт.\n";} 
  else {
    outfile<<"Длина наибольшей строки равна "<<maxlen<<"\n";
    //Поиск и вывод строк максимальной длины
    while (!infile.eof()) {
      infile.getline(st,200,delim='\n');
      len=strlen(st);
      if (len==maxlen) outfile <<st<<"\n";
    }
    // Закрываем файлы 
    infile.close(); 
    outfile.close(); 
    cout << "Запись в файл завершена";
  }  
  system("pause");
  return 0;
}

Ключевые термины

Извлечение из потока – это процесс чтения данных из потока.

Класс fstream – это поток для чтения и для записи данных (двунаправленный обмен).

Класс ifstream – это поток для ввода (чтения) данных из файла

Класс iosродительский класс для файловых потоков.

Класс ofstream – это поток для вывода (записи) данных в файл.

Помещение или включение в поток – это процесс вывода данных в поток.

Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.

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

Краткие итоги

  1. Файловые потоки ofstream, ifstream, fstream наследуются из базового класса ios.
  2. Класс ios контролирует работу буфера обмена.
  3. Создание файлового потока связывает имя потока с выделяемым для него буфером и инициализирует переменные состояния потока.
  4. Флаги форматирования управляют форматом выводимых значений.
  5. Файловые потоки используются для обмена данными при решении задач.
< Лекция 23 || Лекция 24: 123 || Лекция 25 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!