Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Результат_2012_02_09.docx
Скачиваний:
6
Добавлен:
20.04.2015
Размер:
593.36 Кб
Скачать

Задача 3: Напечатать все содержимое файла на экран.

Рассуждения:

  1. Для того, что бы напечать все содержимое на экран необходимо знать имя файла. Очевидно, что имя файла – это строка. Поэтому блок кода для получения имени файла будет выглядить следующим образом:

cout << "enter filename: " << flush;

string dictionary_name;

cin >> dictionary_name;

  1. После получение имени файла его надо попробовать открыть. Следует отметить, что в языке С++ существует тип ifstream, что в расшифровке означает «input file stream», т.е. поток чтения. Успешность открытия потока можно проверить с помощью функции is_open. Однако при Поэтому следующий блок кода для проверки корректности открытия файла будет выглядить следующим образом:

ifstream ifs(dictionary_name);

if(!ifs.is_open()) {

cout << "Could not open file: "<< dictionary_name << endl;

return1;

}

  1. Содержимое файла – множество строк. Следует отметить, что в данном случае под множеством понимается не «классическое» множество из курса математических дисциплин, а то, что в нем содержится несколько строк.

  2. Раз у нас есть множество строк в файле, то необходимо пройти по нему. Вознимает вопрос – сколько раз надо пройти по файлу? Ответ на вопрос весьма логичен – пока не дойдем до конца файла. Для определения того, дошли до конца файла или нет, можно воспользоваться функцией eof, которая есть у ifstream (в нашем случае это переменная ifs).

  3. Естественно после окончания работы необходимо закрыть поток из файла. Это можно делать с помощью функции close.

  4. Саму строку из файла можно прочитать с помощью функции getline(). Следует отметить, что использование оператора >> при чтении из потока прочитает данные до первого проблела, поэтому в данной задаче этот оператор нам не подходит.

  5. Тогда алгоритм чтения всех строк будет выглядить:

//здесь будем хранить строки

vector<string> lines;

//пока не дошли до конца файла

while (ifs.eof() == false) {

string curLine;

getline(ifs, curLine);

lines.push_back(curLine);

}

ifs.close();

  1. И теперь осталось только вывести все строки на экран. Для того, что бы определить, сколько строк находится в векторе, можно воспользоваться функцией size(). Алгоритм вывода будет следующим:

for (int i = 0; i < lines.size(); i++) {

cout << lines[i] << endl;

}

  1. Приведем полный код решения задачи:

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

using namespace std;

int main() {

//ввод имени файла

cout << "enter filename: " << flush;

string dictionary_name;

//dictionary_name = "D:\\sample.txt";

cin >> dictionary_name;

//открытие файла

ifstream ifs(dictionary_name);

//проверка на корректность открытия файла

if (!ifs.is_open()) {

cout << "Could not open file: " << dictionary_name <<endl;

return 1;

}

//здесь будем хранить строки

vector<string> lines;

//пока не дошли до конца файла

while (ifs.eof() == false) {

string curLine;

getline(ifs, curLine);

lines.push_back(curLine);

}

ifs.close();

cout << endl;

for (int i = 0; i < lines.size(); i++) {

cout << lines[i] << endl;

}

cout << "----- file end -------" << endl << "press enter";

char z;

cin.get(z);

return 0;

}