Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
94 строки
2.8 KiB
C++
94 строки
2.8 KiB
C++
#include <iostream>
|
|
#include <fstream>
|
|
#include <cstring>
|
|
#include <cctype>
|
|
|
|
using namespace std;
|
|
|
|
// Функция для проверки корректности имени файла
|
|
bool is_valid_filename(const char* filename) {
|
|
const char* invalid_chars = "\"<>|";
|
|
const size_t filename_length = strlen(filename);
|
|
|
|
// Проверка на наличие запрещенных символов
|
|
if (strpbrk(filename, invalid_chars) != 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 (strcmp(extension, ".txt") != 0 && strcmp(extension, ".TXT") != 0) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
int main() {
|
|
char filename[256];
|
|
|
|
// Запрос имени файла у пользователя
|
|
cout << "Enter the file name: ";
|
|
cin.getline(filename, sizeof(filename));
|
|
|
|
// Проверка корректности имени файла
|
|
if (!is_valid_filename(filename)) {
|
|
cout << "Invalid file name!" << endl;
|
|
return 1;
|
|
}
|
|
|
|
// Добавление расширения .txt, если его нет
|
|
if (strrchr(filename, '.') == nullptr) {
|
|
strcat(filename, ".txt");
|
|
}
|
|
|
|
// Открытие файла для чтения
|
|
ifstream file(filename, ios::binary);
|
|
if (!file) {
|
|
cout << "Failed to open the file!" << endl;
|
|
return 1;
|
|
}
|
|
|
|
// Определение размера файла
|
|
file.seekg(0, ios::end);
|
|
streamsize file_size = file.tellg();
|
|
file.seekg(0, ios::beg);
|
|
|
|
// Выделение памяти для хранения содержимого файла
|
|
char* file_content = new char[file_size];
|
|
|
|
// Чтение содержимого файла в память
|
|
file.read(file_content, file_size);
|
|
file.close();
|
|
|
|
// Запрос строки у пользователя
|
|
char search_string[256];
|
|
cout << "Enter the search string: ";
|
|
cin.getline(search_string, sizeof(search_string));
|
|
|
|
// Подсчет количества вхождений строки в текст файла
|
|
size_t count = 0;
|
|
const char* match = strstr(file_content, search_string);
|
|
while (match != nullptr) {
|
|
count++;
|
|
match = strstr(match + 1, search_string);
|
|
}
|
|
|
|
// Вывод результата
|
|
cout << "Number of occurrences: " << count << endl;
|
|
|
|
// Освобождение выделенной памяти
|
|
delete[] file_content;
|
|
|
|
return 0;
|
|
} |