Я думаю, что есть что-то не так в моем проекте trie. Я использую слово яблоко, чтобы проверить его. Хотя мой тестовый файл dict.txt
содержит слово apple
, он возвращает false
. Что за ошибка?Почему слова не содержатся в моем словаре (C++ trie)?
class Trie{
private:
class Node{
public:
Node* next[26];
bool isWord;
Node(){ isWord = false; }
};
Node* root;
public:
Trie() {
root = new Node();
}
void load(const string& line) {
Node* node = root;
for(int i = 0; i < line.size(); i++){
char x = line[i];
if(node->next[x-'a'] == nullptr)
node->next[x-'a'] = new Node();
node = node->next[x-'a'];
}
node->isWord = true;
}
bool contains(const string& word) {
Node* node = root;
for(int i = 0; i < word.size(); i++){
char x = word[i];
if(node->next[x-'a'] == nullptr)
return false;
else
node = node->next[x-'a'];
}
return node->isWord;
}
bool startWith(const string& prefix) {
Node* node = root;
for(int i = 0; i < prefix.size(); i++){
char x = prefix[i];
if(node->next[x-'a'] == nullptr)
return false;
else
node = node->next[x-'a'];
}
return true;
}
};
int main() {
Trie trie;
ifstream inFile;
string line;
while(getline(inFile, line)){
trie.load(line);
}
cout << trie.contains("apple") << endl;
cout << trie.startWith("cata") << endl;
return 0;
}
Используйте отладчик и один шаг через свой код. Да, проверка кода - это хорошо, но я думаю, что вы можете быстрее решить эту проблему с помощью отладчика, чем ждать ответов на StackOverflow. –
Вы забыли инициализировать 'next', предоставив вам неопределенную программу. – molbdnilo