我正在实施一个字典实施字典。一个trie的基本元素是一个trienode,它由一个字母部分(char),一个标志(这个char是否是一个单词的最后一个字符)和一个26个指针组成。在实施中计数字
的TrieNode类的私有部分包括:
ItemType item;//char
bool isEnd;//flag
typedef TrieNode* TrieNodePtr;
TrieNodePtr myNode;
TrieNodePtr array[26];//array of pointers
这是测试呼叫的一部分:
Trie t4 = Trie();
t4.insert("for");
t4.insert("fork");
t4.insert("top");
t4.insert("tops");
t4.insert("topsy");
t4.insert("toss");
t4.print();
cout << t4.wordCount() << endl;
现在我试图穿越线索来算有多少单词是(有多少标志设置为真)。
size_t TrieNode::wordCount() const{
for (size_t i = 0; i < 26; i++){
if (array[i] == nullptr){
return 0;
}
if (array[i]->isEnd && array[i] != nullptr){
cout << "I'm here" << endl;
return 1 + array[i]->wordCount();
}
else if(!array[i]->isEnd && array[i]!=nullptr){
cout << "I'm there" << endl;
return 0 + array[i]->wordCount();
}
else{
// do nothing
}
}
}
每次函数返回0。我知道这是因为当数组中的第一个元素为空,则函数退出,因此计数始终为0。但我不知道如何避免这个,因为每次我从第一个指针开始。我也得到一个警告:并不是所有的控制路径都返回一个值。我不确定这是从哪里来的。如果当前指针为空,如何使函数继续到数组中的下一个指针?有没有更有效的方法来计算单词?谢谢!
请出示这件事情是如何被调用,数据初始化等没有足够的情况下在这里。 – OldProgrammer