Информатика
Скачать 181.08 Kb.
|
Министерство образования и науки Российской Федерации ФГАОУ ВО «Севастопольский государственный университет» Институт радиоэлектроники и информационной безопасности Кафедра «Радиоэлектроника и телекоммуникации» ОТЧЁТ по лабораторной работе №3 «Программирование операций над строками и файлами» по дисциплине «Информатика» Выполнил: студент гр. РС/с-11-о Штерев Дмитрий Вариант № 2 Защитил с оценкой: ______ Принял: ст. преподаватель Редькина Е. А. Севастополь 2017
Изучить основные принципы операций над строками и файлами в языках C/C++. Исследовать свойства файловых указателей.
Написать программу, которая считывает из текстового файла четыре предложения и выводит их на экран в обратном порядке, т.е. первым выводит четвертое предложение, а последним — первое. Ввод-вывод осуществлять с помощью средств языка С++.
Рис. 1 – Блок-схема программы (часть 1) Рис. 2 – Блок-схема программы (часть 2)
#include #include #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); // обработка текста ifstream fin ("C:\\Borland\\Program\\333.txt", ios::in); // поместите папку с текстовым файловым на лок диск D if (!fin) { cout << "Файл не может быть открыт!" << endl << endl; } else { fin.seekg(0, ios::end); long len = fin.tellg(); char *str1 = new char [len + 1]; fin.seekg(0, ios::beg); fin.read(str1, len); str1[len] = '\0'; int k = 0, i = 0, j = 0; // k - начало нового предложения, i - счетчик циклов, j - счетчик найденных слов char *token; char deliteli[] = ",.!?\/<>)(*;:' "; const int bukvy = 15; char slovo[bukvy]; const int max = 10000; char predlojeniya[max], rezerv[max]; cout << "Введите искомое слово: "; cin >> setw(bukvy) >> slovo; OemToCharA (slovo, slovo); //Функция CharToOem транслирует в строку с OEM-кодировкой символов. system("cls"); cout << "Слово, введенное Вами: " << slovo << endl; // считаем кол-во точек/вопр/воскл в исходном тексте, ведь в тексте может вообще не быть предложений int n = 0; for (i = 0; i < strlen(str1); i++) { if (str1[i]=='.' || str1[i] == '!' || str1[i] == '?') n++;} if (n == 0) cout << endl << "Текст в файле вообще не содержит предложений" << endl << endl; // основная часть else { cout << endl << "Предложения с введенным Вами словом:" << endl; for (i = 0; i < strlen(str1); i++) { if (str1[i]=='.' || str1[i] == '!' || str1[i] == '?') { strncpy(predlojeniya, str1+k, i-k+1); predlojeniya[i-k+1] = '\0'; strcpy (rezerv, predlojeniya); // функция strtok вычленяет токены, разделяемые любым из символов ",.!?\|/<>)(*;:' ", token = strtok(predlojeniya, deliteli); // дубликат строки (rezerv) while (token != NULL) { if (!strcmp(token, slovo)) {cout << rezerv; j++;} token = strtok(NULL, deliteli); } k = i + 1; } } if (j == 0) cout << endl << "К сожалению, текст не содержит предложений со словом <" << slovo << ">" << endl; cout << endl << "--------------------------------------------------------------------------------" << endl; } } system("pause"); return 1; }
Рис. 3 – Результат поиска предложения со словом “head” Рис. 4 – Результат поиска предложения со словом “conscience” Рис. 4 – Результат поиска предложения со словом “love” Рис. 5 – Данный текст
В ходе лабораторной работы были изучены принципы работы с текстовыми файлами, строками и символами в этих файлах. Для данной задачи были использованы циклы for, while. В написанной программе были рассмотрены несколько вариантов решения задачи:
|