-
Notifications
You must be signed in to change notification settings - Fork 0
/
file_reader.cpp
85 lines (74 loc) · 1.78 KB
/
file_reader.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "file_reader.h"
#include <exception>
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <memory>
const std::string WHITESPACE = " \n\r\t\f\v\"";
std::string ltrim(const std::string &s)
{
size_t start = s.find_first_not_of(WHITESPACE);
return (start == std::string::npos) ? "" : s.substr(start);
}
std::string rtrim(const std::string &s)
{
size_t end = s.find_last_not_of(WHITESPACE);
return (end == std::string::npos) ? "" : s.substr(0, end + 1);
}
std::string trim(const std::string &s)
{
return rtrim(ltrim(s));
}
WordList::WordList(std::string filename)
{
std::cout << "WordList Constructed\n";
std::ifstream word_file(filename);
std::string word_line;
if (word_file.is_open())
{
while (std::getline(word_file, word_line))
{
this->add_word(trim(word_line));
}
}
else
{
std::string error_msg = "Cannot locate file " + filename + " in .exe directory.";
std::cout << error_msg << "\n";
throw std::runtime_error(error_msg);
}
}
bool WordList::check_word(std::string word) const
{
if (word.size() > 5)
{
return false;
}
for (const char &letter : word)
{
if (letter > 'z' || letter < 'A')
{
return false;
}
}
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
return _word_checker.search(word);
}
bool WordList::add_word(const std::string &word)
{
_available_word_list.emplace(word);
_word_checker.insert(word);
return true;
}
void WordList::print_set() const
{
for (auto i : _available_word_list)
{
std::cout << i << "\n";
}
}
const std::set<std::string> &WordList::get_word_list() const
{
return _available_word_list;
}