Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
73 строки
1.8 KiB
C++
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;
|
|
}
|