spacepaste

  1.  
  2. // Returns true if key presents in trie, else false
  3. bool search_segmented(struct TrieNode *root, struct TrieNode *segments, const char *key)
  4. {
  5. int level;
  6. int length = strlen(key);
  7. int index;
  8. struct TrieNode *pCrawl = root;
  9. str_new(segment);
  10. int idx = 0;
  11. for (level = 0; level < length; level++)
  12. {
  13. str_insert_char(segment, key[level]);
  14. ps(segment.string);
  15. // pp(segments)
  16. bool result1 = search(&segments, segment.string, idx);
  17. // pp(segments)
  18. pi(idx)
  19. pb(result1);
  20. if (result1) {
  21. str_reset(segment);
  22. idx++;
  23. }
  24. pi(idx)
  25. str_new(ch);
  26. str_insert_char(ch, key[level]);
  27. if (ch.type & STR_TYPE_DIGIT) index = INT_TO_INDEX(key[level]);
  28. else if (ch.type & STR_TYPE_ALPHABETIC) index = CHAR_TO_INDEX(key[level]);
  29. str_free(ch)
  30. if (!pCrawl->children[index]) {
  31. index = CHAR_TO_INDEX('x');
  32. if (!pCrawl->children[index]) return false;
  33. }
  34. pCrawl = pCrawl->children[index];
  35. }
  36. str_free(segment);
  37. return (pCrawl != NULL && pCrawl->isEndOfWord);
  38. }
  39.