Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
90 строки
3.0 KiB
C++
90 строки
3.0 KiB
C++
#include <iostream>
|
|
#include <fstream>
|
|
#include <cstring>
|
|
|
|
// Функция для проверки корректности имени файла
|
|
bool isValidFileName(const char* filename) {
|
|
// Запрещенные символы в имени файла
|
|
const char* forbiddenChars = "*\"<>?|";
|
|
if (strpbrk(filename, forbiddenChars) != nullptr) {
|
|
return false;
|
|
}
|
|
|
|
// Проверка наличия двоеточия
|
|
const char* colon = strchr(filename, ':');
|
|
if (colon != nullptr) {
|
|
if (*(colon - 1) != isalpha(*(colon - 1)) || *(colon + 1) != '\\') {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Проверка расширения файла (если есть)
|
|
const char* extension = strrchr(filename, '.');
|
|
if (extension != nullptr) {
|
|
if (std::strcmp(extension, ".txt") != 0 && std::strcmp(extension, ".TXT") != 0) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
int main() {
|
|
setlocale(0, "ru-ru");
|
|
char filename[100];
|
|
std::cout << "Введите имя файла: ";
|
|
std::cin >> filename;
|
|
|
|
// Проверка корректности имени файла
|
|
if (!isValidFileName(filename)) {
|
|
std::cout << "Некорректное имя файла." << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
// Добавление расширения .txt, если оно отсутствует
|
|
char* extension = strrchr(filename, '.');
|
|
if (extension == nullptr) {
|
|
if (strlen(filename) + 4 < sizeof(filename)) { // Проверяем, есть ли достаточно места в буфере
|
|
strcat_s(filename, sizeof(filename), ".txt");
|
|
}
|
|
else {
|
|
std::cout << "Недостаточно места в буфере для добавления расширения." << std::endl;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
// Открытие файла и загрузка его содержимого в память
|
|
std::ifstream file(filename, std::ios::binary | std::ios::ate);
|
|
if (!file.is_open()) {
|
|
std::cout << "Не удалось открыть файл." << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
std::streampos fileSize = file.tellg();
|
|
file.seekg(0, std::ios::beg);
|
|
|
|
char* fileContents = new char[fileSize];
|
|
file.read(fileContents, fileSize);
|
|
file.close();
|
|
|
|
// Запрос строки от пользователя
|
|
char searchString[100];
|
|
std::cout << "Введите строку для поиска: ";
|
|
std::cin >> searchString;
|
|
|
|
// Подсчет числа вхождений строки в текст файла
|
|
int count = 0;
|
|
char* position = fileContents;
|
|
while ((position = strstr(position, searchString)) != nullptr) {
|
|
++count;
|
|
position += strlen(searchString);
|
|
}
|
|
|
|
std::cout << "Число вхождений строки в файл: " << count << std::endl;
|
|
|
|
// Освобождение памяти
|
|
delete[] fileContents;
|
|
|
|
return 0;
|
|
}
|