嗨:)有誰能告訴我爲什麼下面的代碼不起作用嗎?該程序在對應於'B'
的節點中的if(children[word[letter_no] - 'A'] == nullptr)
行處崩潰。但節點是創建的,當我嘗試在構造函數中調用children[1]
時,它起作用。但是,當它被稱爲在insert()
功能,它不...試圖插入一個單詞到trie中時出現分段錯誤
包括
#include <memory> //shared_ptr
#include <string>
using namespace std;
const int ALPHABET = 26;
class Node {
public:
shared_ptr<Node> children[ALPHABET];
Node() { for (int i = 0; i < ALPHABET; ++i) children[i] = nullptr;}
void insert(const string &word, unsigned letter_no) {
if (letter_no < word.length()) {
if (children[word[letter_no] - 'A'] == nullptr)
children[word[letter_no] - 'A'] = make_shared<Node>();
children[word[letter_no] - 'A']->insert(word, letter_no+1);
}
}
};
int main() {
Node trie{};
trie.insert("ABC", 0);
return 0;
}
請注意,字母不授權是在一個連續範圍相同的數字。如果例如系統使用了EBCDIC(可以),那麼這將不起作用。 – NathanOliver
偏離主題,但空行和括號是免費的! – peval27