У меня есть слово «все» в моей тройке и слово «alter», но «alt» - это не слово в trie. Но когда я проверяю «alt», он все равно возвращает true, потому что is_word истинно, поскольку «все» - это слово. Как должна работать эта ошибка.Дифференцируя слова в trie
//Here's the code
typedef struct node{
bool is_word;
struct node *children[27];
} node;
unsigned int wsize=0;
node * root;
bool check(const char* word)
{
// TODO
node *chrawler=root;
for(int i=0;i<strlen(word)-1;i++)
{
int t;
if(word[i]>=65&&word[i]<=90)
{
t=word[i]-'A';
}
else if(isalpha(word[i]))
t=word[i]-'a';
else
t=26;
if(chrawler->children[t]==NULL)
return false;
else
chrawler=chrawler->children[t];
}
if(chrawler->is_word)
return true;
return false;
}
// Load function
bool load(const char* dictionary)
{
// TODO
FILE *inptr=fopen(dictionary,"r");
if(inptr==NULL)
{
return false;
}
node *new_node=malloc(sizeof(node));
root=new_node;
char * word=malloc((LENGTH+1)*sizeof(char));
int index=0;
for(int c=fgetc(inptr);c!=EOF;c=fgetc(inptr))
{
char ch=c;
if(ch=='\n')
{
word[index]='\0';
index=0;
node *chrawler=root;
for(int i=1;i<strlen(word);i++)
{
int t;
if(isalpha(word[i-1]))
t=word[i-1]-'a';
else
t=26;
if(chrawler->children[t]==NULL)
{
node *new_node=malloc(sizeof(node));
chrawler->children[t]=new_node;
chrawler=chrawler->children[t];
}
else
chrawler=chrawler->children[t];
}
chrawler->is_word=1;
wsize++;
}
else
{
word[index]=ch;
index++;
}
}
return true;
}
Есть неясности ... Во-первых один: Почему 'STRLEN (слово) -1'? Второе: как вы заполняете свою трю? – Fefux
Для ввода trie я сделал отдельную функциональную нагрузку, и я использовал strlen (word) -1, потому что мне нужно пройти ко второму последнему узлу, а затем использовать его указатель, если последний узел содержит это слово. –
Не могли бы вы разместить свою функцию загрузки? – Fefux