Задание 4. Написать программу для обработки текстового файла

master
NazarovKO 4 месяцев назад
Родитель 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;
}
Загрузка…
Отмена
Сохранить