Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Листинг 8.6



#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <locale>

using namespace std;

int main()

{ setlocale(LC_ALL, "Russian");

locale loc ("Russian_Russia");

cout << "Задание:\nНаписать программу, которая считывает текст\n из файла и выводит на экран предложения, \n содержащие максимальное количество знаков пунктуации.\n";

/*устанавливаем русскую локаль - чтобы писать русскими буквами =)*/

//открываем файл для чтения

ifstream FileInput("file.txt",ios::in);

//если файл не обнаружен, то аварийно выходим

if (!FileInput)

{

cout << "Ошибка! Файл не открыт!" << endl;

return 1;

}

cout << "Текст,в котором осуществляется поиск предложения с max кол-вом знаков пунктуации\n";

cout << "Чтение из файла выполняется функцией fread(buf, size, num, file) блоками по size байт!Требуется также задать количество блоков num.В программе размер блока задан в переменной равным 1024, поскольку размер кластера кратен степени двойки.В общем случае чем более длинными блоками мы читаем информацию, тем быстрее будет выполнен ввод.Для того, чтобы обеспечить чтение всего файла, к количеству блоков добавляется 1 для округления после деления.\n";

//устанавливаем позицию курсора в конец файла

FileInput.seekg(0,ios::end);

/*узнаем длину файла методом tellg(), который сообщает о позиции курсора в файле (т.е. сколько байт прошел курсор)*/

int LengthOfFile = FileInput.tellg();

//создаем переменную для хранения содержимого файла

char *str = new char [LengthOfFile+1];

//устанавливаем позицию курсора в начало файла

FileInput.seekg(0,ios::beg);

/*считываем содержимое файла в переменную str на заданное число байт LengthOfFile*/

FileInput.read(str,LengthOfFile);

//добавляем символ конца строки в переменную str

str[LengthOfFile]='\0';

/*pos - текущая позиция в файле;

counter - текущее кол-во пунктационных знаков;

max - текущее максимальное кол-во пунктационных знаков;

l - число символов в предложении;

begin, end - начало и конец предложения с макс. кол-вом пункт. знаков*/

int pos = 0,l = 0,end = 0,begin = 0;

int counter = 0,max = 0;

//поиск предложения c макс кол-вом пункт. знаков

while (str[pos])

{

/*если текущий символ явл-ся пунктационным, то счетчик увеличиваем на 1*/

if (ispunct(str[pos],loc)) counter++;

//если достигнут конец предложения, то...

if (str[pos]=='.' || str[pos]=='!' || str[pos]=='?')

/*...при условии максиммального кол-ва пунктационных символов вычисляем начало и конец данного предложения...*/

if (counter>max)

{

max = counter;

counter = 0;

/*здесь вычисляем начало предложения из текущего положения вычитаем кол-во прошедших символов*/

begin = pos - l;

end = pos;

l = 0;

}

/*...иначе обнуляем количество пунктационных символов и количество символов в пердложении*/

else {counter = 0; l = 0;}

l++;

pos++;

}

l = begin;

//Вывод предложения с максимальным количеством пунктационных знаков

for(l; l < end + 1; l++)

cout << str[l];

return 0;

}

Рисунок 8.4 – Файл для входных данных





Дата публикования: 2015-10-09; Прочитано: 361 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...