Сравнение строк с опечаткой

В моей базе данных много названий лекарств, которые довольно сложно запомнить. Я хочу дать пользователю возможность искать лекарство с опечаткой. Сравнивая с strcasecmp не так хорош в этом случае, потому что он останавливается после первого несоответствия, поэтому я попытался вычислить разницу во всей строке, но разница между опечаткой и некоторым мусором слишком мала, чтобы их можно было различить. Есть ли эффективный алгоритм, который я могу использовать?

Это моя первая попытка:

char d[] = "1,3-Indanedione";
char s1[] = "1,3-Indaendione";
char s2[] = "1,3-QQQ";
cout<<strcasecmp(d,s1)<<" "<<strcasecmp(d,s2)<<"\n"; 

Выход: 9 -8

И второе:

char d[] = "1,3-Indanedione";
char s1[] = "1,3-Indaendione";
char s2[] = "1,3-QQQ";
int l = min(strlen(d), strlen(s1));
int diff = 0;
for (int i = 0; i < l; ++i)
{
  int x = abs(tolower(d[i]) - tolower(s1[i]));
  diff += x;
}
cout<<diff<<" ";
l = min(strlen(d), strlen(s2));
diff = 0;
for (int i = 0; i < l; ++i)
{
  int x = abs(tolower(d[i]) - tolower(s2[i]));
  diff += x;
}
cout<<diff<<"\n";

Выход: 18 24

0 ответов

Другие вопросы по тегам