Родитель
b42806b6a5
Сommit
7633aef3c4
@ -0,0 +1,93 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
// Êîíñòàíòû
|
||||
const size_t MAX_SIZE = 256;
|
||||
const char* separators = " \r\n,.!?:;()-";
|
||||
const char* forbidden_chars = "*\"<>|?";
|
||||
|
||||
// Ôóíêöèÿ äëÿ ïðîâåðêè êîððåêòíîñòè èìåíè ôàéëà
|
||||
bool is_valid_filename(const char* filename) {
|
||||
// Ïðîâåðêà íà çàïðåùåííûå ñèìâîëû
|
||||
if (strpbrk(filename, forbidden_chars)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ïðîâåðêà íà äâîåòî÷èå
|
||||
const char* colon_pos = strchr(filename, ':');
|
||||
if (colon_pos && (colon_pos != filename + 1 || !isalpha(colon_pos[-1]) || colon_pos[1] != '\\')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ïðîâåðêà ðàñøèðåíèÿ
|
||||
const char* dot_pos = strrchr(filename, '.');
|
||||
if (dot_pos && strncmp(dot_pos, ".txt", 4) != 0 && strncmp(dot_pos, ".TXT", 4) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Ôóíêöèÿ äëÿ äîáàâëåíèÿ ðàñøèðåíèÿ .txt, åñëè åãî íåò
|
||||
void add_txt_extension(char* filename) {
|
||||
const char* dot_pos = strrchr(filename, '.');
|
||||
if (!dot_pos || strncmp(dot_pos, ".txt", 4) != 0) {
|
||||
strcat(filename, ".txt");
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
// Øàã 4.1: Çàïðîñèòü ó ïîëüçîâàòåëÿ èìÿ ôàéëà
|
||||
char filename[MAX_SIZE];
|
||||
std::cout << "Enter the filename: ";
|
||||
std::cin.getline(filename, MAX_SIZE);
|
||||
|
||||
// Øàã 4.2: Ïðîâåðèòü êîððåêòíîñòü èìåíè ôàéëà
|
||||
if (!is_valid_filename(filename)) {
|
||||
std::cerr << "Invalid filename." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Øàã 4.3: Äîáàâèòü ðàñøèðåíèå .txt, åñëè åãî íåò
|
||||
add_txt_extension(filename);
|
||||
|
||||
// Øàã 4.4: Çàãðóçèòü ñîäåðæèìîå òåêñòîâîãî ôàéëà â ïàìÿòü
|
||||
std::ifstream file(filename, std::ios::binary | std::ios::ate);
|
||||
if (!file) {
|
||||
std::cerr << "Failed to open file." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::streamsize size = file.tellg();
|
||||
file.seekg(0, std::ios::beg);
|
||||
|
||||
char* buffer = new char[size + 1];
|
||||
if (!file.read(buffer, size)) {
|
||||
std::cerr << "Failed to read file." << std::endl;
|
||||
delete[] buffer;
|
||||
return 1;
|
||||
}
|
||||
buffer[size] = '\0';
|
||||
file.close();
|
||||
|
||||
// Øàã 4.5: Çàïðîñèòü ó ïîëüçîâàòåëÿ ñòðîêó
|
||||
char search_string[MAX_SIZE];
|
||||
std::cout << "Enter the string to search: ";
|
||||
std::cin.getline(search_string, MAX_SIZE);
|
||||
|
||||
// Øàã 4.6: Ïîäñ÷èòàòü è âûâåñòè ÷èñëî âõîæäåíèé ñòðîêè â òåêñò ôàéëà
|
||||
int count = 0;
|
||||
const char* pos = buffer;
|
||||
while ((pos = strstr(pos, search_string)) != nullptr) {
|
||||
count++;
|
||||
pos++;
|
||||
}
|
||||
std::cout << "The string \"" << search_string << "\" occurs " << count << " times in the file." << std::endl;
|
||||
|
||||
// Øàã 4.7: Îñâîáîäèòü âûäåëåííóþ ïàìÿòü
|
||||
delete[] buffer;
|
||||
|
||||
return 0;
|
||||
}
|
Загрузка…
Ссылка в новой задаче