【发布时间】:2017-06-28 21:13:06
【问题描述】:
嗨 :) 谁能告诉我为什么下面的代码不起作用?程序在与'B' 对应的节点中的if(children[word[letter_no] - 'A'] == nullptr) 行崩溃。但是节点 是 创建的,当我尝试在构造函数中调用 children[1] 时,它可以工作。但是当它在insert() 函数中被调用时,它不会...
包括
#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(它可以),那么这将不起作用。
-
离题,但空行和括号是免费的!