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

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

Читайте также:
  1. Figure 6. Ежедневная оценка числа сотрудников в зависимости от времени обработки запросов и количества инцидентов
  2. I. 1.1. Пример разработки модели задачи технического контроля.
  3. I. ЛОГИКА ВЫВОДА
  4. II. Учет накладных расходов на примере ТОО «Тепломонолит».
  5. III. Схематическое изображение накопления - второй пример
  6. IP адресация. Правила использования адресов. Маски переменной длины. Пример разбиения на подсети с маской переменной длины.
  7. Snow Brand Milk не делает выводов из собственных ошибок

 

Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, состоящие из заданного количества строк. UML-диаграмма этого алгоритма приведена на рисунке 8.1.

Рисунок 8.1 - UML-диаграмма деятельности для примера 8.4

Листинг 8.5

 

#include "stdafx.h"

#include <iostream>

#include <fstream>

 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "Russian");

cout<<"\n"

<<"Задание: Считать текст из файла. Вывести на экран только предложения, \n"

<<"\tсостоящие из заданного количества слов\n"

<<"----------------------------------------\n";

 

ifstream fin("text.txt",ios::in);

 

if (! fin)

{

cout<<"Ошибка открытия файла"<<endl;

return 1;

}

 

int nword;

 

cout<<"Введите искомое число слов в предложении: ";

cin>>nword;

 

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

int len=fin.tellg();

char *buf=new char [len+1];

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

fin.read(buf,len);

buf[len]='\0';

int l_beg=0,i=0,n=0,j=0;

bool exist;

exist=false;

while (buf[i])

{

if (buf[i]==' ') n++;

if (buf[i]=='.')

{

n++;

if (n==nword)

{

for(j=l_beg;j<=i;j++)

cout<<buf[j];

exist=true;

cout<<endl;

}

l_beg=i+2;

i=i+2;

n=0;

}

i++;

}

if (!exist) cout<<"Таких предложений не найдено"<<endl;

 

fin.close();

return 0;

}

 

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

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

 

Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, содержащие максимальное количество знаков пунктуации. UML-диаграмма этого алгоритма приведена на рисунке 8.3.

Рисунок 8.3 - UML-диаграмма деятельности для примера 8.5

Листинг 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-26; просмотров: 344 | Нарушение авторских прав


Читайте в этой же книге: Операнд_1 ? операнд_2 : операнд_3 4 страница | Операнд_1 ? операнд_2 : операнд_3 5 страница | Операнд_1 ? операнд_2 : операнд_3 6 страница | Операнд_1 ? операнд_2 : операнд_3 7 страница | Операнд_1 ? операнд_2 : операнд_3 8 страница | Пример 6.1. Среднее арифметическое и количество положительных элементов | Пример 6.2. Номер столбца из положительных элементов | Пример 6.4. Сглаживание заданной вещественной матрицы, работа с файлами | Пример 6.5. Определение количества отрицательных элементов в тех строках данной целочисленной прямоугольной матрицы, которые содержат хотя бы один нулевой элемент | Пример 7.1. Передача в функцию параметров стандартных типов |
<== предыдущая страница | следующая страница ==>
Пример 7.9. Перегрузка функций| Пример 8.6. Определение количества слов в файле, состоящих не более чем из четырех букв

mybiblioteka.su - 2015-2024 год. (0.012 сек.)