Сравнение строк с опечаткой
В моей базе данных много названий лекарств, которые довольно сложно запомнить. Я хочу дать пользователю возможность искать лекарство с опечаткой. Сравнивая с 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