Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_uk_k_lab_r_6.doc
Скачиваний:
4
Добавлен:
18.12.2018
Размер:
189.44 Кб
Скачать
  1. 6.2 Работа с предложениями текста

В листинге 6.2 представлена программа, которая считывает текст из файла (рис. 6.3) и выводит на экран только вопросительные предложения из этого текста (рис. 6.4).

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

3. Выделить в динамической памяти буфер соответствующего размера.

4. Считать файл с диска в буфер. 5. Анализируя буфер посимвольно, выделять предложения. Если предложение оканчивается вопросительным знаком, вывести его на экран.

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

Листинг 6.2 Вывод вопросительных предложений

#include <stdio.h>

#include <iostream>

#include <string>

#include <windows.h>

using namespace std;

char bufRus[256];

char* Rus(char* mes)

{ AnsiToOem(mes, bufRus);

return bufRus;

}

int main(void)

{ char ch[2]; FILE * f;

f=fopen("D:\\FileTXT\\text2.txt","r");

if (f != NULL)

{ // определяем длину файла

fseek(f,0,SEEK_END);

long len = ftell(f);

// выделяем буфер необходимого размера

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

// смещаем указатель на начало файла и

// считываем файл в буфер

fseek(f,0,SEEK_SET);

fread(buf, len,1, f); buf[len]='\0';

// выделение предложений из текста

long n = 0; // позиция начала предложения

long i=0, j=0;

while(buf[i])

{ if (buf[i]== '?')

{ // вывод символов вопросительного

// предложения

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

{ ch[0]=buf[j]; ch[1]='\0';

cout << Rus(ch);

}

n=i+1;

}

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

n=i+1;

i++;

}

fclose(f);

cout << endl;

} else

cout << "Файл не найден!\n";

}

Рисунок 6.3 – Файл с текстом

Рисунок 6.4 – Результат выполнения программы.

  1. 6.3 Работа со структурами и бинарными файлами

В листинге 6.3 представлена программа, которая

  • создает бинарный файл, в котором храниться информация о сотрудниках предприятия: фамилия и инициалы, год рождения, оклад.

  • Выводит на экран информацию, хранимую в бинарном файле, а также сведения о сотруднике по заданной фамилии и инициалам (рис. 6.5).

Листинг 6.3 Создание и обработка бинарного файла

#include <stdio.h>

#include <string.h>

#include <iostream>

using namespace std;

const int l_name = 30;

struct Man

{ char name[l_name];

int birth_year;

float pay;

};

int compare(const void *manl, const void *man2);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]