73 lines
2.7 KiB
C++
73 lines
2.7 KiB
C++
#include <iostream>
|
||
#include <fstream>
|
||
#include <vector>
|
||
#include <omp.h>
|
||
#include <sstream>
|
||
#include <locale>
|
||
using namespace std;
|
||
|
||
// Функция для подчёта статистики о файле
|
||
void count_stats(const string& filename, int& line_count, int& word_count, int& char_count) {
|
||
ifstream file(filename);
|
||
if (!file.is_open()) {
|
||
cerr << "Ошибка открытия файла: " << filename << endl;
|
||
return;
|
||
}
|
||
|
||
string line;
|
||
while (getline(file, line)) {
|
||
//конструкция atomic гарантирует атомарный доступ к определенному месту хранения, а не подвергает его возможности одновременного чтения и записи нескольких потоков,
|
||
// что может привести к неопределенным значениям. Другими словами, операция выполняется целиком, без возможности прерывания другими потоками.
|
||
#pragma omp atomic
|
||
++line_count;
|
||
|
||
char_count += line.size();
|
||
|
||
// Подсчет слов
|
||
bool in_word = false;
|
||
for (char c : line) {
|
||
if (isspace(c)) {
|
||
in_word = false;
|
||
}
|
||
else if (!in_word) {
|
||
in_word = true;
|
||
#pragma omp atomic
|
||
++word_count;
|
||
}
|
||
}
|
||
}
|
||
|
||
file.close();
|
||
}
|
||
|
||
int main() {
|
||
setlocale(LC_ALL, "Russian");
|
||
const string directory_path = "C:\\Users\\ilyas\\Desktop\\500f"; // Замените на путь к вашему каталогу
|
||
|
||
|
||
#pragma omp parallel for
|
||
for (int i = 0; i <= 500; ++i) {// Обработка файлов с именами 1.txt, 2.txt, ..., 10.txt. Нужно задать число, о скольких файлах мы хотим видеть стату
|
||
|
||
string filename = directory_path + "\\" + to_string(i) + ".txt";
|
||
|
||
int line_count = 0;
|
||
int word_count = 0;
|
||
int char_count = 0;
|
||
|
||
count_stats(filename, line_count, word_count, char_count);
|
||
|
||
// Вывод результатов
|
||
#pragma omp critical
|
||
{
|
||
cout << "Статистика для файла " << filename << ":" << endl
|
||
<< " Количество строк: " << line_count << endl
|
||
<< " Количество слов: " << word_count << endl
|
||
<< " Количество символов: " << char_count << endl
|
||
<< "-------------------------" << endl;
|
||
}
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|