#include "word.h" #include "dictionary.h" #include #include #include using std::string; using std::vector; Word::Word(const string &w, const vector &t) : word(w), triagrams(t) { std::sort(triagrams.begin(), triagrams.end()); } std::vector get_trigrams(const std::string &text) { std::vector trigrams; if (text.size() < 3) { return trigrams; // Return an empty vector if the input is too short } for (size_t i = 0; i <= text.size() - 3; ++i) { trigrams.push_back( text.substr(i, 3)); // Extract a substring of length 3 } return trigrams; } Word::Word(const std::string &w) : word(w) { this->triagrams = get_trigrams(w); std::sort(triagrams.begin(), triagrams.end()); } string Word::get_word() const { return string(); } vector Word::get_triagrams() const { return triagrams; } unsigned int Word::get_matches(const vector &t) const { unsigned int matches = 0; for (const auto &triagram : t) { if (std::binary_search(triagrams.begin(), triagrams.end(), triagram)) { ++matches; } } return matches; } std::ostream &operator<<(std::ostream &out, const Word &w) { auto space = string(" "); out << w.word; out << space; out << w.triagrams.size(); for (const auto &tria : w.triagrams) { out << space << tria; } return out; } bool operator==(const Word &lhs, const Word &rhs) { return lhs.word == rhs.word && std::equal(lhs.triagrams.begin(), lhs.triagrams.end(), rhs.triagrams.begin()); }