所以我正在实现一个用于从文件中读取唯一单词的trie。我在网上看到了如何实现它,并遇到了这样做: //在字符串树中插入字符串 “
void insert(struct node *head, string str)
{
int i, j;
for(i = 0;i < str.size(); ++i){
//if the child node is pointing to NULL
if(head -> next_char[str[i] - 'a'] == NULL){
struct node *n;
//initialise the new node
n = new struct node;
for(j = 0;j < 26; ++j){
n -> next_char[j] = NULL;
}
n -> end_string = 0;
head -> next_char[str[i] - 'a'] = n;
head = n;
}
//if the child node is not pointing to q
else head = head -> next_char[str[i] - 'a'];
}
//to mark the end_string flag for this string
head -> end_string = 1;
}
我的困惑来自于这条线: '头 - &gt; next_char [str [i] - 'a'] == NULL 在这段代码实现它的所有方法中使用“a”减法的目的是什么?
答案 0 :(得分:1)
当你的输入字符串由一些相对较小的固定字母表中的字符组成时,Trie才有意义。
在这个具体实现中,假设这些字符在<IfModule mod_expires.c>
.. ExpiresByType application/font-woff "access 1 month"
ExpiresByType application/font-woff2 "access 1 month"
ExpiresByType application/vnd.ms-fontobject "access 1 month"
ExpiresByType application/x-font-ttf "access 1 month"
ExpiresByType font/opentype "access 1 month"
的范围内,总共26个。
与许多语言a
类型实际上是z
或Char
一样,您可以使用它执行算术运算。执行此操作时,字符的代码将用作操作数。
考虑到上述情况很明显,将字符从一些已知的非零范围映射到从零开始的范围的最简单方法是从特定字符的代码中减去范围的起始元素。
Int
范围:
Byte
答案 1 :(得分:0)