#include #include #include #include const int MAX_FILENAME_LENGTH = 256; const int MAX_INPUT_STRING_LENGTH = 256; bool isValidFilename(const char* filename) { // Проверка наличия запрещенных символов const char* forbiddenChars = "*\"<>?|"; if (strpbrk(filename, forbiddenChars) != nullptr) { return false; } // Проверка наличия двоеточия const char* colonPosition = strchr(filename, ':'); if (colonPosition != nullptr) { if (colonPosition == filename + 1 && isalpha(filename[0])) { // Проверка двоеточия только вторым символом const char* backslashPosition = strchr(colonPosition + 1, '\\'); if (backslashPosition == nullptr) { return false; } } else { return false; } } // Проверка расширения файла const char* extension = strrchr(filename, '.'); if (extension != nullptr) { if (strcmp(extension, ".txt") != 0 && strcmp(extension, ".TXT") != 0) { return false; } } return true; } int main() { // Запрос имени файла char filename[MAX_FILENAME_LENGTH]; std::cout << "Введите имя файла: "; std::cin.getline(filename, MAX_FILENAME_LENGTH); // Проверка корректности имени файла if (!isValidFilename(filename)) { std::cerr << "Некорректное имя файла.\n"; return 1; } // Добавление расширения .txt, если его нет if (strrchr(filename, '.') == nullptr) { strcat(filename, ".txt"); } // Открытие файла std::ifstream file(filename, std::ios::binary); if (!file.is_open()) { std::cerr << "Ошибка открытия файла.\n"; return 1; } // Определение размера файла file.seekg(0, std::ios::end); std::streampos fileSize = file.tellg(); file.seekg(0, std::ios::beg); // Выделение памяти под содержимое файла char* fileContent = new char[fileSize]; // Чтение содержимого файла в память file.read(fileContent, fileSize); file.close(); // Запрос строки от пользователя char inputString[MAX_INPUT_STRING_LENGTH]; std::cout << "Введите строку для поиска: "; std::cin.getline(inputString, MAX_INPUT_STRING_LENGTH); // Подсчет вхождений строки в файл int occurrences = 0; char* position = fileContent; while ((position = strstr(position, inputString)) != nullptr) { occurrences++; position += strlen(inputString); } // Вывод результата std::cout << "Число вхождений строки в файл: " << occurrences << std::endl; // Освобождение выделенной памяти delete[] fileContent; return 0; }