C 在搜索函数中返回一个trie节点

C 在搜索函数中返回一个trie节点,c,trie,C,Trie,我正在用trie编写一个程序。我的搜索函数返回一个整数,但我需要它返回一个trie节点 struct TrieNode{ struct TrieNode *children[ALPHABET_SIZE]; int repeat; int groupNumber; int groupName; int isLeaf; }; int CHAR_TO_INDEX(int c){ if(c >= 97 && c <= 122){

我正在用trie编写一个程序。我的搜索函数返回一个整数,但我需要它返回一个trie节点

struct TrieNode{
   struct TrieNode *children[ALPHABET_SIZE];
   int repeat;
   int groupNumber;
   int groupName;
   int  isLeaf;
};

int CHAR_TO_INDEX(int c){
   if(c >= 97 && c <= 122){
       c -= 97;
   }
   else if(c >= 65 && c <= 90){
       c = c - 65 + 32;
   }
   else
       return -1;
   return c;
}

int search(struct TrieNode *root, const char *key,int ask)
{
   int level;
   int length = strlen(key);
   int index;
   struct TrieNode *pCrawl = root;

   for (level = 0; level < length; level++)
   {
       index = CHAR_TO_INDEX(key[level]);
       if(index == -1)
           continue;

       if (!pCrawl->children[index])
           return 0;

       pCrawl = pCrawl->children[index];
    }

    if(ask == 0)
        return (pCrawl->repeat)*(pCrawl != NULL && pCrawl->isLeaf);
    return (pCrawl->groupNumber)*(pCrawl != NULL && pCrawl->isLeaf);
}
结构三节点{ 结构三节点*子项[字母表大小]; int重复; 整数组号; int组名; 国际岛; }; 整数字符到整数索引(整数c){ 如果(c>=97&&c=65&&c子项[索引]) 返回0; pCrawl=pCrawl->children[索引]; } 如果(ask==0) 返回(pCrawl->repeat)*(pCrawl!=NULL&&pCrawl->isLeaf); 返回(pCrawl->groupNumber)*(pCrawl!=NULL&&pCrawl->isLeaf); } 但当我希望它返回struct trinode*时,它将返回错误的结果,如果它返回struct trinode*,它将得到运行时错误

struct TrieNode search(struct TrieNode *root, const char *key)
{
   int level;
   int length = strlen(key);
   int index;
   struct TrieNode *pCrawl = root;

   for (level = 0; level < length; level++)
   {
       index = CHAR_TO_INDEX(key[level]);
       if(index == -1)
           continue;

       if (!pCrawl->children[index])
           return ;

       pCrawl = pCrawl->children[index];
   }
   return *pCrawl;
}
结构三节点搜索(结构三节点*根,常量字符*键)
{
智力水平;
int length=strlen(键);
整数指数;
结构三节点*pCrawl=根;
用于(级别=0;级别<长度;级别++)
{
索引=字符到索引(键[级别]);
如果(索引==-1)
继续;
如果(!pCrawl->子项[索引])
返回;
pCrawl=pCrawl->children[索引];
}
返回*pCrawl;
}

结构三节点*搜索(结构三节点*根,常量字符*键)
{
智力水平;
int length=strlen(键);
整数指数;
结构三节点*pCrawl=根;
用于(级别=0;级别<长度;级别++)
{
索引=字符到索引(键[级别]);
如果(索引==-1)
继续;
如果(!pCrawl->子项[索引])
返回;
pCrawl=pCrawl->children[索引];
}
返回pCrawl;
}

返回一个
struct triode
没有问题。但在当前示例中,您有:
if(!pCrawl->children[index])return
这是错误的,因为在这种情况下,您没有返回
结构三节点
,BTW
c=c-65+32-->
c-='A'什么是字母表大小?
struct TrieNode *search(struct TrieNode *root, const char *key)
{
   int level;
   int length = strlen(key);
   int index;
   struct TrieNode *pCrawl = root;

   for (level = 0; level < length; level++)
   {
       index = CHAR_TO_INDEX(key[level]);
       if(index == -1)
           continue;

       if (!pCrawl->children[index])
           return ;

       pCrawl = pCrawl->children[index];
   }
   return pCrawl;
}