int main(){ std::string src = "sitting"; std::string dest = "kitten"; int dist = levenshtein_dist(src, dest); std::cout << "final res: " << dist << std::endl; }
// On exit, function value is the Levenshtein distance, and word is // the closest word for the input vocabulary int did_you_mean(const char *input, const char **words, const int nwords, char **word) { int i; int least_dist = -1; int closest_word; int dist; for (i=0; i<nwords; i++) { dist = levenshtein_dist(input, words[i]); if (dist == 0) { closest_word = i; least_dist = 0; break; } if (dist <= least_dist || least_dist < 0) { closest_word = i; least_dist = dist; } } word = malloc(strlen(words[closest_word]) * sizeof(*word)); for (i=0; i<strlen(words[i]); i++) (*word)[i] = (words[closest_word])[i]; return least_dist; }
int main(int argc, char *argv[]) { // Distance between identical strings is zero assert( levenshtein_dist("", "") == 0 ); assert( levenshtein_dist("same", "same") == 0 ); // Symmetry assert( levenshtein_dist("", "the") == 3 ); assert( levenshtein_dist("the", "") == 3 ); assert( levenshtein_dist("vim", "vm") == 1 ); assert( levenshtein_dist("vm", "vim") == 1 ); assert( levenshtein_dist("a", "as") == 1 ); assert( levenshtein_dist("as", "a") == 1 ); assert( levenshtein_dist("mathematical", "methodical") == 5 ); assert( levenshtein_dist("methodical", "mathematical") == 5 ); // Triangle Inequality assert( levenshtein_dist("string", "sting") + levenshtein_dist("sting", "ring") >= levenshtein_dist("string", "ring")); // transpositions are 2 units assert( levenshtein_dist("typographical", "tyopgraphical") == 2 ); return 0; }