- Timestamp:
- Aug 28, 2010, 4:48:48 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/consolecommands3/src/libraries/util/StringUtils.cc
r6424 r7238 514 514 @return Number of replacements 515 515 */ 516 _UtilExportsize_t replaceCharacters(std::string& str, char target, char replacement)516 size_t replaceCharacters(std::string& str, char target, char replacement) 517 517 { 518 518 size_t j = 0; … … 527 527 return j; 528 528 } 529 530 /** 531 @brief Calculates the Levenshtein distance between two strings. 532 533 The Levenshtein distance is defined by the number of transformations needed to convert str1 534 into str2. Possible transformations are substituted, added, or removed characters. 535 */ 536 unsigned int getLevenshteinDistance(const std::string& str1, const std::string& str2) 537 { 538 size_t cols = str1.size() + 1; 539 size_t rows = str2.size() + 1; 540 int matrix[rows][cols]; 541 542 for (size_t r = 0; r < rows; ++r) 543 for (size_t c = 0; c < cols; ++c) 544 matrix[r][c] = 0; 545 546 for (size_t i = 1; i < cols; ++i) 547 matrix[0][i] = i; 548 for (size_t i = 1; i < rows; ++i) 549 matrix[i][0] = i; 550 551 for (size_t r = 1; r < rows; ++r) 552 for (size_t c = 1; c < cols; ++c) 553 matrix[r][c] = (str1[c-1] != str2[r-1]); 554 555 for (size_t r = 1; r < rows; ++r) 556 for (size_t c = 1; c < cols; ++c) 557 matrix[r][c] = std::min(std::min(matrix[r-1][c] + 1, matrix[r][c-1] + 1), matrix[r-1][c-1] + (str1[c-1] != str2[r-1])); 558 559 return matrix[rows-1][cols-1]; 560 } 529 561 }
Note: See TracChangeset
for help on using the changeset viewer.