Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab6 / findInFiles

.cpp
Скачиваний:
5
Добавлен:
05.02.2020
Размер:
1.23 Кб
Скачать
#include "Aho_Corasick.h"

#include <iostream>
#include <string>
#include <set>
#include <experimental/filesystem>
#include <fstream>

using namespace std;
using namespace std::experimental::filesystem;

int main(int argc, char const *argv[]) {
	locale::global(locale(""));

	if (argc > 1) {
		set<wstring> patterns;

		for(int i = 1; i < argc; i++) {
			string buffer(argv[i]);
			wstring wstringBuffer(buffer.begin(), buffer.end());
			patterns.emplace(wstringBuffer);
		}

		Trie trie(patterns);

		path myPath(".");

		for(auto& fileOrFolder: directory_iterator(myPath)) {
			if (!is_directory(fileOrFolder)) {
				wifstream file(fileOrFolder.path().filename());

				wstring content;

				getline(file, content, (wchar_t)file.eof());

				map<wstring, set<lli>> solutions = AhoCorasick(content, trie);

				if (!solutions.empty()) {
					wcout << fileOrFolder.path().filename() << endl;

					for(auto &solution:solutions) {
						wcout << "{ " << solution.first << L" ";
					
						for(auto &patternIndex: solution.second) {
							wcout << patternIndex << L" ";
						}

						wcout << "}" << endl;
					}

					wcout << endl;
				}
			}
		}
	} else {
		wcout << L"Too few arguments. Try again." << endl;
	}
	
	return 0;
}
Соседние файлы в папке lab6