我認爲我的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