2017-03-11 6 views
-1

트라이 트리로로드되는 사전 파일 (소문자 및 아포스트로피 단어 만 포함)이 있습니다.

나는 편지 케이스에 관계없이 trie 트리에 파일의 단어가 있는지 검사하는 검사 기능이 있습니다.데이터 구조에서 아포스트로피 확인

아포스트로피의 단어는 항상 맞춤법이 틀린 것으로 만 제외하고 모두 잘 작동합니다.

typedef struct NODE 
{ 
    bool isWord; 
    struct NODE* child[ALPHA_SIZE]; 
} NODE; 

정의

#define ASCII_DIFFERENCE 'a' 

어떤 도움에 감사드립니다 :

여기

bool check(const char *word) 
{ 
    // creat arrow to follow letters 
    NODE* arrow = root; 

    // for every letter in word 
    for (int i = 0, length = strlen(word); i < length; i++) 
    { 
     int index; 
     if(word[i] == '\'') 
     { 
      index = 26; 
     } else { 
       index = tolower(word[i]) - ASCII_DIFFERENCE; 
     } 

     // if NULL? creat a new one and move arrow to new child 
     if (arrow->child[index] == NULL) 
     { 
      return false; 
     } else if (arrow->child[index] != NULL) // not null? 
     { 
      arrow = arrow->child[index]; 
     } 
    } 

    return arrow->isWord; 
} 

내 구조체 내 기능입니다.

+0

입력 및 원하는 출력의 예를 제공 할 수 있습니까? 및 전류 출력. –

+0

세계에 "i 'd"라는 단어가 사전에 있지만 체크 기능은 여전히 ​​false를 반환하고 철자가 틀린 단어로 계산합니다. @TonyTannous –

+0

그러나 '\'에 대한 특별한 것은 없으며 그 이유를 이해할 수 없습니다. 문제. 단어가 사전에 올바르게 삽입 되었습니까? (즉, 인덱스 26에 올바르게 넣습니까?)이'if/else'에 print 문을 넣고 트리 탐색에서 경로를 따라갈 수 있습니까? 또한'ALPHA_SIZE = 27'입니까? – Arash

답변

0

아포스트로피는 16 진수 27, 10 진수 39입니다. 잘못된 마법 번호를 사용하고있는 것 같습니다.

+0

글쎄, 십진수 티의 39로하지만 상관없이 내가 넣어 그것을 알파벳 크기 + 1 인 색인 26에 넣습니다. 따라서 aa = 0 및 za = 25이면 26에 아포스트로피를 넣을 수 있습니다. –

관련 문제