// Returns true if key presents in trie, else false bool search_segmented(struct TrieNode *root, struct TrieNode *segments, const char *key) { int level; int length = strlen(key); int index; struct TrieNode *pCrawl = root; str_new(segment); int idx = 0; for (level = 0; level < length; level++) { str_insert_char(segment, key[level]); ps(segment.string); // pp(segments) bool result1 = search(&segments, segment.string, idx); // pp(segments) pi(idx) pb(result1); if (result1) { str_reset(segment); idx++; } pi(idx) str_new(ch); str_insert_char(ch, key[level]); if (ch.type & STR_TYPE_DIGIT) index = INT_TO_INDEX(key[level]); else if (ch.type & STR_TYPE_ALPHABETIC) index = CHAR_TO_INDEX(key[level]); str_free(ch) if (!pCrawl->children[index]) { index = CHAR_TO_INDEX('x'); if (!pCrawl->children[index]) return false; } pCrawl = pCrawl->children[index]; } str_free(segment); return (pCrawl != NULL && pCrawl->isEndOfWord); }