diff --git a/4.cpp b/4.cpp deleted file mode 100644 index 6740be2..0000000 --- a/4.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include -#include // Для работы с файлами и C-строками -#include // Для обработки строк -#include // Для проверки символов -#include // Для управления памятью - -using namespace std; - -const size_t MAX_FILENAME_LENGTH = 260; // Максимальная длина имени файла -const size_t MAX_SEARCH_STRING_LENGTH = 256; // Максимальная длина строки поиска - -const char* invalid_chars = "*\"<>?|"; - -bool isValidFilename(const char* filename) { - for (size_t i = 0; i < strlen(invalid_chars); ++i) { - if (strchr(filename, invalid_chars[i]) != nullptr) { - return false; - } - } - - const char* colon = strchr(filename, ':'); - if (colon != nullptr) { - if (colon - filename != 1 || !isalpha(filename[0]) || *(colon + 1) != '\\') { - return false; - } - } - - const char* extension = strrchr(filename, '.'); - if (extension != nullptr) { - if (strlen(extension) != 4) return false; - - char ext[5]; - strncpy(ext, extension, 4); - ext[4] = '\0'; - for (int i = 0; i < 4; ++i) ext[i] = tolower(ext[i]); - return strcmp(ext, ".txt") == 0; - } - - return true; -} - -void ensureTxtExtension(char* filename) { - if (strrchr(filename, '.') == nullptr) { - strcat(filename, ".txt"); - } -} - -int main() { - char filename[MAX_FILENAME_LENGTH]; - cout << "Введите имя файла: "; - cin.getline(filename, MAX_FILENAME_LENGTH); - - if (!isValidFilename(filename)) { - cout << "Неверное имя файла." << endl; - return 1; - } - - ensureTxtExtension(filename); - - if (!isValidFilename(filename)) { - cout << "Ошибка в имени после добавления расширения." << endl; - return 1; - } - - FILE* file = fopen(filename, "rb"); - if (file == nullptr) { - cout << "Ошибка открытия файла: " << filename << endl; - return 1; - } - - if (fseek(file, 0, SEEK_END) != 0) { - cout << "Ошибка перехода в конец файла." << endl; - fclose(file); - return 1; - } - - long file_size = ftell(file); - if (file_size == -1L) { - cout << "Не удалось узнать размер файла." << endl; - fclose(file); - return 1; - } - - rewind(file); - - char* content = (char*)malloc(file_size + 1); - if (content == nullptr) { - cout << "Ошибка выделения памяти." << endl; - fclose(file); - return 1; - } - - size_t read_size = fread(content, sizeof(char), file_size, file); - if (read_size != (size_t)file_size) { - cout << "Ошибка чтения файла." << endl; - free(content); - fclose(file); - return 1; - } - - content[file_size] = '\0'; - fclose(file); - - char search_str[MAX_SEARCH_STRING_LENGTH]; - cout << "Введите строку для поиска: "; - cin.getline(search_str, MAX_SEARCH_STRING_LENGTH); - - int count = 0; - char* pos = content; - - size_t search_len = strlen(search_str); - if (search_len == 0) { - cout << "Пустая строка для поиска." << endl; - free(content); - return 1; - } - - while ((pos = strstr(pos, search_str)) != nullptr) { - count++; - pos += search_len; - } - - cout << "Частота появления строки \"" << search_str << "\": " << count << endl; - - free(content); - return 0; -} \ No newline at end of file