#include #include #include #include bool isValidFilename(const char* filename) { const char* invalidChars = "*\"<>?|"; if (strpbrk(filename, invalidChars)) return false; char* colon = strchr(filename, ':'); if (colon) { if (colon != filename + 1 || !isalpha(filename[0]) || colon[1] != '\\') return false; } const char* extension = strrchr(filename, '.'); if (extension) { char ext[5]; strncpy(ext, extension, 4); ext[4] = '\0'; for (char& c : ext) c = tolower(c); if (strncmp(ext, ".txt", 4) != 0) return false; } return true; } int main() { char filename[256]; std::cout << "Введите имя файла: "; std::cin.getline(filename, 256); if (!isValidFilename(filename)) { std::cerr << "Некорректное имя файла." << std::endl; return 1; } if (!strrchr(filename, '.')) { strcat(filename, ".txt"); } std::ifstream file(filename, std::ios::binary); if (!file) { std::cerr << "Ошибка открытия файла." << std::endl; return 1; } file.seekg(0, std::ios::end); std::streamsize fileSize = file.tellg(); file.seekg(0, std::ios::beg); char* buffer = new char[fileSize + 1]; file.read(buffer, fileSize); buffer[fileSize] = '\0'; file.close(); char searchString[256]; std::cout << "Введите строку для поиска: "; std::cin.getline(searchString, 256); size_t searchLength = strlen(searchString); size_t count = 0; char* position = buffer; while ((position = strstr(position, searchString)) != nullptr) { ++count; position += searchLength; } std::cout << "Число вхождений строки: " << count << std::endl; delete[] buffer; return 0; }