IvanchenkoIS 4 месяцев назад
Родитель 0b88f98f1b
Сommit 3bb8fdf86f

127
4.cpp

@ -1,127 +0,0 @@
#include <iostream>
#include <cstdio> // Для работы с файлами и C-строками
#include <cstring> // Для обработки строк
#include <cctype> // Для проверки символов
#include <cstdlib> // Для управления памятью
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;
}
Загрузка…
Отмена
Сохранить