Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 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 – Файл для входных данных






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.