From 24491f04e3c9d0be6c8bd0461b11e54026773bd1 Mon Sep 17 00:00:00 2001 From: NosovDI Date: Fri, 27 Oct 2023 14:45:41 +0700 Subject: [PATCH] add task4 --- task4.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ text.txt | 2 ++ 2 files changed, 77 insertions(+) create mode 100644 task4.cpp create mode 100644 text.txt diff --git a/task4.cpp b/task4.cpp new file mode 100644 index 0000000..fdb4279 --- /dev/null +++ b/task4.cpp @@ -0,0 +1,75 @@ +#include +#include +#include +#include + +using namespace std; + +int main() +{ + setlocale(LC_ALL, "Russian"); + + // Шаг 1: Запрос у пользователя имя файла + char filename[256]; + cout << "Введите имя файла: "; + cin.getline(filename, sizeof(filename)); + + // Шаг 2: Проверка корректности имени файла + bool isValid = true; + + // Проверка на запрещенные символы + const char* forbiddenChars = "*\"<>?|"; + if (strpbrk(filename, forbiddenChars) != nullptr) + isValid = false; + + // Проверка на двоеточие + if (strchr(filename, ':') != nullptr && + (filename[1] != '\\' || !isalpha(filename[0]) || + strchr(filename, '\\') != strrchr(filename, '\\'))) + isValid = false; + + // Шаг 3: Проверка на расширение + const char* extension = ".txt"; + if (strncmp(strrchr(filename, '.'), extension, strlen(extension)) != 0) + strcat(filename, extension); + + // Шаг 4: Загрузить содержимое текстового файла в память + if (isValid) + { + ifstream file(filename, ios::binary | ios::ate); + if (file.is_open()) + { + streampos fileSize = file.tellg(); + char* buffer = new char[fileSize]; + file.seekg(0, ios::beg); + file.read(buffer, fileSize); + file.close(); + + // Шаг 5: Запросить у пользователя строку + char searchString[256]; + cout << "Введите строку для поиска: "; + cin.getline(searchString, sizeof(searchString)); + + // Шаг 6: Подсчитать число вхождений строки в текст файл + int count = 0; + char* p = buffer; + while ((p = strstr(p, searchString)) != nullptr) + { + count++; + p += strlen(searchString); + } + + cout << "Число вхождений строки \"" << searchString << "\" в текстовом файле: " << count << endl; + + // Шаг 7: Освободить выделенную память + delete[] buffer; + } + else + cout << "Ошибка открытия файла." << endl; + } + else + cout << "Некорректное имя файла." << endl; + + system("pause"); + return 0; +} \ No newline at end of file diff --git a/text.txt b/text.txt new file mode 100644 index 0000000..95f2e98 --- /dev/null +++ b/text.txt @@ -0,0 +1,2 @@ +I am a programmist!!! +This program is working so good! \ No newline at end of file