#include #include #include // Функция для проверки корректности имени файла bool isValidFileName(const char* filename) { // Запрещенные символы в имени файла const char* forbiddenChars = "*\"<>?|"; if (strpbrk(filename, forbiddenChars) != nullptr) { return false; } // Проверка наличия двоеточия const char* colon = strchr(filename, ':'); if (colon != nullptr) { if (*(colon - 1) != isalpha(*(colon - 1)) || *(colon + 1) != '\\') { return false; } } // Проверка расширения файла (если есть) const char* extension = strrchr(filename, '.'); if (extension != nullptr) { if (std::strcmp(extension, ".txt") != 0 && std::strcmp(extension, ".TXT") != 0) { return false; } } return true; } int main() { setlocale(0, "ru-ru"); char filename[100]; std::cout << "Введите имя файла: "; std::cin >> filename; // Проверка корректности имени файла if (!isValidFileName(filename)) { std::cout << "Некорректное имя файла." << std::endl; return 1; } // Добавление расширения .txt, если оно отсутствует char* extension = strrchr(filename, '.'); if (extension == nullptr) { if (strlen(filename) + 4 < sizeof(filename)) { // Проверяем, есть ли достаточно места в буфере strcat_s(filename, sizeof(filename), ".txt"); } else { std::cout << "Недостаточно места в буфере для добавления расширения." << std::endl; return 1; } } // Открытие файла и загрузка его содержимого в память std::ifstream file(filename, std::ios::binary | std::ios::ate); if (!file.is_open()) { std::cout << "Не удалось открыть файл." << std::endl; return 1; } std::streampos fileSize = file.tellg(); file.seekg(0, std::ios::beg); char* fileContents = new char[fileSize]; file.read(fileContents, fileSize); file.close(); // Запрос строки от пользователя char searchString[100]; std::cout << "Введите строку для поиска: "; std::cin >> searchString; // Подсчет числа вхождений строки в текст файла int count = 0; char* position = fileContents; while ((position = strstr(position, searchString)) != nullptr) { ++count; position += strlen(searchString); } std::cout << "Число вхождений строки в файл: " << count << std::endl; // Освобождение памяти delete[] fileContents; return 0; }