diff --git a/.gitignore b/.gitignore index 4f6422d..694cf30 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,3 @@ build .cache/ words.txt compile_commands.json -lab2/edit -lab2/spell diff --git a/lab2/Makefile b/lab2/Makefile index 48c8fe4..4e354d7 100644 --- a/lab2/Makefile +++ b/lab2/Makefile @@ -1,6 +1,5 @@ CXX = g++ -CXXFLAGS = -Wall -Wextra -Wpedantic -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual -Wconversion -Wsign-conversion -Wnull-dereference -Wdouble-promotion -Wformat=2 -std=c++17 -#CXXFLAGS += -Werror +CXXFLAGS = -g3 -Werror -Wall -Wpedantic -Wunused-variable -std=c++17 SRC = $(wildcard *.cc) OBJ = $(SRC:.cc=.o) diff --git a/lab2/dictionary.cc b/lab2/dictionary.cc index 6747a69..1ce7578 100644 --- a/lab2/dictionary.cc +++ b/lab2/dictionary.cc @@ -9,18 +9,11 @@ using std::string; using std::vector; +// using std::filesystem::path; Dictionary::Dictionary() {} -bool Dictionary::contains(const string &word) const { - int l = word.length(); - Word w = Word(word); - if (std::find(this->words[l].begin(), this->words[l].end(), w) != - std::end(this->words[l])) { - return true; - } - return false; -} +bool Dictionary::contains(const string &word) const { return true; } vector Dictionary::get_suggestions(const string &word) const { vector suggestions; @@ -30,6 +23,21 @@ vector Dictionary::get_suggestions(const string &word) const { return suggestions; } +// Function to generate trigrams from a string +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; +} + int Dictionary::spit(path p) { std::ofstream file(p); @@ -40,7 +48,13 @@ int Dictionary::spit(path p) { for (int a = 0; a < MAXLEN; a++) { for (auto &word : words[a]) { - file << word; + std::vector trias = get_trigrams(word.get_word()); + file << word << " " << trias.size(); + + for (auto tria : trias) { + file << " " << tria; + } + file << std::endl; } } @@ -62,7 +76,7 @@ int Dictionary::slurp(path p) { while (std::getline(file, line)) { if (line.size() > MAXLEN) continue; - words[line.size()].push_back(Word(line)); + words[line.size()].push_back(Word(line, get_trigrams(line))); } file.close(); diff --git a/lab2/word.cc b/lab2/word.cc index 4e89ae4..870d6a2 100644 --- a/lab2/word.cc +++ b/lab2/word.cc @@ -1,5 +1,4 @@ #include "word.h" -#include "dictionary.h" #include #include #include @@ -11,25 +10,6 @@ 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(); } unsigned int Word::get_matches(const vector &t) const { @@ -47,15 +27,8 @@ 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()); -} diff --git a/lab2/word.h b/lab2/word.h index babe27e..7c1fd5b 100644 --- a/lab2/word.h +++ b/lab2/word.h @@ -11,9 +11,6 @@ class Word { /** Creates a word w with the sorted trigrams t */ Word(const std::string &w, const std::vector &t); - /** Creates a word w and derives the triagrams internally */ - Word(const std::string &w); - /** Returns the word */ std::string get_word() const; @@ -25,7 +22,4 @@ class Word { const std::string word; std::vector triagrams; friend std::ostream &operator<<(std::ostream &out, const Word &o); - friend bool operator==(const Word &lhs, const Word &rhs); }; - -bool operator==(const Word &lhs, const Word &rhs);