Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

73 строки
1.8 KiB
C++

#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>
bool isValidFilename(const char* filename) {
const char* invalidChars = "*\"<>?|";
if (strpbrk(filename, invalidChars)) return false;
char* colon = strchr(filename, ':');
if (colon) {
if (colon != filename + 1 || !isalpha(filename[0]) || colon[1] != '\\') return false;
}
const char* extension = strrchr(filename, '.');
if (extension) {
char ext[5];
strncpy(ext, extension, 4);
ext[4] = '\0';
for (char& c : ext) c = tolower(c);
if (strncmp(ext, ".txt", 4) != 0) return false;
}
return true;
}
int main() {
char filename[256];
std::cout << "Ââåäèòå èìÿ ôàéëà: ";
std::cin.getline(filename, 256);
if (!isValidFilename(filename)) {
std::cerr << "Íåêîððåêòíîå èìÿ ôàéëà." << std::endl;
return 1;
}
if (!strrchr(filename, '.')) {
strcat(filename, ".txt");
}
std::ifstream file(filename, std::ios::binary);
if (!file) {
std::cerr << "Îøèáêà îòêðûòèÿ ôàéëà." << std::endl;
return 1;
}
file.seekg(0, std::ios::end);
std::streamsize fileSize = file.tellg();
file.seekg(0, std::ios::beg);
char* buffer = new char[fileSize + 1];
file.read(buffer, fileSize);
buffer[fileSize] = '\0';
file.close();
char searchString[256];
std::cout << "Ââåäèòå ñòðîêó äëÿ ïîèñêà: ";
std::cin.getline(searchString, 256);
size_t searchLength = strlen(searchString);
size_t count = 0;
char* position = buffer;
while ((position = strstr(position, searchString)) != nullptr) {
++count;
position += searchLength;
}
std::cout << "×èñëî âõîæäåíèé ñòðîêè: " << count << std::endl;
delete[] buffer;
return 0;
}