#include "bloom.h" #include #include #include #include // Hitta vilka ord i words som den sorterade nyckeln "key" är ett anagram av std::vector find_anagrams(std::string const& key, std::vector const& words) { std::vector anagrams { }; for (std::string const& word : words) { std::string other { word }; std::sort(other.begin(), other.end()); // key och word är anagram if (key == other) anagrams.push_back(word); } return anagrams; } // erca har 3 anagram i words.txt // tarle har 4 anagram i words.txt // welob har 5 anagram i words.txt int main() { std::ifstream ifs { "words.txt" }; Bloom_Filter filter { }; std::vector words { }; std::string word { }; while (ifs >> word) { words.push_back(word); // normalisera ordet och stoppa in i filtret std::sort(word.begin(), word.end()); filter.insert(word); } while (true) { std::cout << "Enter a word: "; if (not (std::cin >> word)) break; else if (word == "quit") break; std::string key { word }; std::sort(key.begin(), key.end()); // Kontrollera om ordet potentiellt är ett anagram som finns lagrat if (filter.find(key)) { // vi vet att ordet *kanske* finns i ordlistan, men vi måste // undersöka vidare om så faktiskt är fallet. std::vector anagrams { find_anagrams(key, words) }; if (not anagrams.empty()) { std::cout << "The angram cluster found for " << word << " was: " << std::endl; for (std::string const& word : anagrams) { std::cout << " - " << word << std::endl; } // det fanns minst ett annat ord som inte var ett anagram så vi // tar det från början med nästa ord. continue; } } // Vi kommer endast hit om vi garanterat vet att ordet inte var en del // av ett anagram kluster. std::cout << "No anagrams found for " << word << std::endl; } }