#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; const size_t MAX_SIZE = 256; const char not_allowed[] = "*\"<>?|"; const char separators[] = " \r\n,.!?:;()-"; // Функция для получения строки с пользовательским вводом void getstring(char* s, size_t n) { fgets(s, n, stdin); if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; } // Функция для перевода строки в нижний регистр void lower(char* s) { for (; *s; s++) *s = tolower(*s); } // Функция для проверки корректности имени файла bool iscorrectname(char* name) { char lext[8]; // Проверка на наличие запрещенных символов for (int i = 0; name[i]; i++) { if (strchr(not_allowed, name[i]) != 0) return false; } // Проверка корректности двоеточия и пути char* colon = strchr(name, ':'); if (colon != NULL) { if (colon - name != 1) return false; if (colon[1] != '\\') return false; if (strrchr(name, ':') != colon) return false; } // Проверка и добавление расширения .txt char* fname = strrchr(name, '\\'); fname = fname ? fname + 1 : name; char* ext = strchr(fname, '.'); if (ext == NULL) strcat(name, ".txt"); else { strcpy(lext, ext); lower(lext); if (strcmp(lext, ".txt")) return false; } return true; } int main() { setlocale(LC_ALL, "rus"); char filename[MAX_SIZE]; char str[MAX_SIZE]; cout << "Название файла: "; getstring(filename, MAX_SIZE); // Проверка имени файла if (!iscorrectname(filename)) { cout << "Некорректное название файла\n"; return -1; } // Открытие файла FILE* fin = fopen(filename, "rb"); if (fin == NULL) { cout << "Файл не найден\n"; return -1; } // Определение размера файла fseek(fin, 0, SEEK_END); size_t length = ftell(fin); fseek(fin, 0, SEEK_SET); // Чтение содержимого файла в память char* text = new char[length + 1]; memset(text, 0, length + 1); fread(text, 1, length, fin); cout << "Введите символы для подсчёта: "; getstring(str, MAX_SIZE); // Подсчет вхождений строки const char* start = text; size_t count = 0; while (true) { const size_t separator_count = strspn(start, separators); start += separator_count; if (start[0] == '\0') { break; } const size_t word_length = strcspn(start, separators); if (word_length == strlen(str) && strncmp(str, start, word_length) == 0) { count++; } start += word_length; } cout << "Результат: " << count << "\n"; // Освобождение памяти и закрытие файла fclose(fin); delete[] text; return 0; }