![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Привет всем.
Допустим имеются несколько слов: 1. маршрут 2. ашот 3. миршот, ... Также задано ключевое слово: март. Есть ли возможность получить только похожую часть всех слов. Ожидаемый результат: 1. март 2. ат 3. мрт Пробовал регулярным выражением типа: м*а*р*т*. Результат такой: 1. мар 2. р 3. т 4. а 5. 6. т 7. м 8. р 9. 10. т |
|
#2
|
|||
|
|||
|
Что понимается под "получить только похожую часть"? Если нет правила, то у вас одно понятие, у меня другое, у компьютера третье.
Хотя догадываюсь: ищется первая буква из шаблона, если нет, то следующая. Как только она находится, у шаблона эта буква изымается из поиска, переходим к следующей, а поиск продолжается с нового места. Последний раз редактировалось AlexSku, 05.01.2012 в 10:58. |
|
#3
|
|||
|
|||
|
Я же показал пример, надо чтою результат был таким: март, ат, мрт
А у меня получается: мар р т а т м р т |
|
#4
|
|||
|
|||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Pattern, S, Res: String;
I, J: Integer;
begin
Pattern:= AnsiUpperCase(Edit1.Text); // 'Март'
S:= AnsiUpperCase(Edit2.Text); // Можно из ListBox, Memo...
Res:= '';
J:= 1;
for I:= 1 to Length(Pattern) do
begin
J:= Pos(Pattern[i], S);
if J > 0 then
begin
Res:= Res + Pattern[i];
Delete(S, J, 1);
if S = '' then Break;
end;
end;
Edit3.Text:= Res;
end; |
|
#5
|
|||
|
|||
|
Хороший код, но он меняет местами букв. Например: Pattern:='shina' S:='hasan'. hasan становится shna, а должно было hasn
|
|
#6
|
|||
|
|||
|
Если что не так, то код плохой. Нашёл ошибку, надо:
Код:
Delete(S, 1, J); Если надо сравнить общие буквы, то алгоритм такой: первое слово это множество букв, второе слово это другое множество букв, совпадение это пересечение множеств (Set1 * Set2). Последний раз редактировалось AlexSku, 05.01.2012 в 14:45. |
|
#7
|
|||
|
|||
|
|
|
#8
|
|||
|
|||
|
А всё-таки вы не ответили, что вы понимаете под "найти похожую часть слов". У меня, кстати, есть реализация другого алгоритма (Боера-Мура), вычисляющую степень похожести, как и ваш алгоритм Левенштейна, но неохота его искать, не зная, для какой задачи вы ищете решение.
|