#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; }