Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++ Лабораторная работа №6 ТКС-12б (файлы и стр...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
216.06 Кб
Скачать

Лабораторная работа №6

Обработка строковых данных с использованием внешних файлов”

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

1. Теоретическая часть

1.1. Работа со строковыми данными в языке программирования C++.

В С++ отсутствует специальный тип для объявления строк, и для этого используют стандартный тип символов – CHAR. Значение строковой переменной указывается в двойных кавычках.

Имеется несколько способов описания и задания строк:

1. Задание строки в виде массива символьного типа.

При этом возможны два случая: явное указание длины и неявное указание длины массива.

Явное:

char имя[N];

При этом количество символов в строке должно быть <= N-1.

char aud[20]=”аудитория 3.140”

Неявное:

char имя []=”последовательность символов”;

При этом организуется массив такой длины, сколько символов в строке +1 (“\0”).

Имя массива – это указатель:

stk =”abcde”;

stk = &stk[0], где stk – имя строки.

2. Строка в виде указателя на символьный тип.

char *имя = “последовательность символов”

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

char *st1= “композитор”

3. Многомерный символьный массив как набор строк.

char имя [m][n] = {“строка 1”,

“строка 2”,

“строка m”};

char fruits[5][10] = {“яблоко”,

“сливы”,

“абрикосы”};

При выводе строк на экран используются следующие функции:

printf( ) с форматом %s;

printf(“%s”, fio);

puts(имя строки);

puts(fio);

Обе функции выводят все содержимое строки на экран без 0- символа. Отличие состоит в том, что printf() может переводить курсор на другую строку или нет, а puts() – переводит обязательно.

Функции для работы со строками.

Используется библиотека #include <string.h>.

1. strlen(s) – определяет длину строки и возвращает количество символов без 0-символа.

2. strcat(s1,s2) – производит сцепку (соединение) двух строковых переменных s1 и s2, причем s2 присоединяется в конец s1.

3. strncat(s,s2,n) – соединяет n первых символов из строки s2 с s.

4. strcmp(s1,s2) – производит сравнение двух строк s1 и s2. При сравнении происходит посимвольное вычитание кодов символов.

Если строки равны, то функция возвращает значение 0.

5. strncmp(s1,s2,n) – аналогична strcmp(), но для n первых символов.

6. strcpy(s1,s2) – выполняет копирование строки s2 в строку s1.

7. strchr(s,с) – возвращает указатель на первое появление символа с в строке s.

8. strrchr(s,c) – возвращает указатель на последнее появление символа с в строке s.

1.2. Работа с файлами данных в языке программирования C++.

Файлы данных могут содержать различную информацию как в

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

Описание указателя на файл производится обязательно до открытия файла. Форма описания следующая:

FILE *f1, *f2...;

где FILE – это описанный в заголовочном файле STDIO.H тип данных, представляющий собой буфер для обмена данными с файлом.

Открытие файла:

f1 = fopen (“имя файла”,”режим”),

где f1 – описанный ранее указатель на файл;

fopen – функция открытия файла;

“имя файла” – указывается полное имя файла;

“режим” – этот параметр определяет тип операции, которые будут выполняться с файлом или режим его работы:

“r” – открытие файла для чтения;

“w” – для записи;

“a” – для дозаписи;

“+” – добавка к основному режиму, указывает на возможность выполнения операций в совмещенном режиме чтение/запись.

“r+” – чтение с последующей записью;

“b” – добавка к основному режиму, указывает, что файл содержит информацию в двоичном коде.

Для записи данных в файл используется оператор fprintf:

fprintf(f1,“управляющая строка”,” список вывода”);

Для чтения данных из файла используется оператор fscanf:

fscanf(f1,“управляющая строка”, список адресов);

Чтение числовых данных из файла необходимо производить с учетом формата, в котором данные были занесены в файл.

Для записи и чтения строк можно использовать функции fprintf() и fscanf() с форматом %s или специальные функции fputs(имя строки, f1), fgets(имя строки, max длина, f1);

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

fclose(указатель файла);

Проверка конца файла:

feof(указатель файла)

1.3 Пример составления алгоритма и программы на языке C++ для обработки строковых данных с использованием внешних файлов.

Задание:

В файле хранится текстовая информация. Количество строк в файле – не более 20, в каждой строке записано не более 80 символов. Символы, встречающие в тексте, – буквы латинского алфавита, арабские цифры, разделители. Посчитать, сколько прописных букв встречается в тексте.

Решение.

Постановка задачи.

Предварительно создадим текстовый файл data.txt, в который занесем текстовую информацию. Для организации работы с файлом будем использовать файловую переменную FILE *f. Считывать данные из файла будем построчно с помощью функции fgets() в переменную s (char s[80]). В каждой строке проведем посимвольную проверку, является ли очередной символ прописным (>=’A’ и <=’Z’). Переменную Kol_pr будем использовать для подсчета количества таких символов.

1.2.1 Блок схема:

1.2.2 Текст программы на языке C++:

#include<string.h>

#include<stdio.h>

#include<conio.h>

int main()

{int i,Kol_pr=0;

char s[80];

FILE *f;

clrscr();

f=fopen("data.txt","r");

while (!feof(f))

{

fgets(s,80,f);

printf("%s",s);

for(i=0;i<strlen(s);i++)

if ((s[i]>='A')&&(s[i]<='Z')) Kol_pr++;

}

printf("\n\nKol-vo propisnix bukv = %d",Kol_pr);

getch();

fclose(f);

return 0;

}

1.2.3 Результаты работы программы:

The Old Man and the Sea is the story of an epic struggle between an old,

seasoned fisherman and the greatest catch of his life. For eighty-four days,

Santiago, an aged Cuban fisherman, has set out to sea and returned empty-

handed. So conspicuously unlucky is he that the parents of his young,

devoted apprentice and friend, Manolin, have forced the boy to leave the

old man in order to fish in a more prosperous boat. Nevertheless, the boy

continues to care for the old man upon his return each night. He helps the

old man tote his gear to his ramshackle hut, secures food for him, and

discusses the latest developments in American baseball, especially the trials

of the old man’s hero, Joe DiMaggio. Santiago is confident that his

unproductive streak will soon come to an end, and he resolves to sail out

farther than usual the following day.

Kol-vo propisnix bukv = 16

Содержимое исходного файла data.txt:

The Old Man and the Sea is the story of an epic struggle between an old,

seasoned fisherman and the greatest catch of his life. For eighty-four days,

Santiago, an aged Cuban fisherman, has set out to sea and returned empty-

handed. So conspicuously unlucky is he that the parents of his young,

devoted apprentice and friend, Manolin, have forced the boy to leave the

old man in order to fish in a more prosperous boat. Nevertheless, the boy

continues to care for the old man upon his return each night. He helps the

old man tote his gear to his ramshackle hut, secures food for him, and

discusses the latest developments in American baseball, especially the trials

of the old man’s hero, Joe DiMaggio. Santiago is confident that his

unproductive streak will soon come to an end, and he resolves to sail out

farther than usual the following day.