![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сравнить 2 предложения (разные разделители)?
New_ser © (2008-09-09 08:03:00)Есть два предложения. Слова в них одинаковые, одинаковый порядок расположения слов. Разное - регистр (ну это можно, в принципе, быстро исправить), и, самое главное - разделитель между словами: пробел, два пробела, встречаются скрытые символы... Вот как можно организовать сравнение 2-х предложений по словам?
MBo (2008-09-09 10:00:00) [1]
i := 1;
j := 1;
while (i <= Length(s1)) and (j <= Length(s2)) do begin
if not (s1[i] in Letters) then
Inc(i)
else
if not (s2[j] in Letters) then
Inc(j)
else
if s1[i] <> s2[j] then begin
строки не совпадают
Break
end
end;
Ega23 (2008-09-09 09:47:00) [2]
> Дело в том, что я что-то слышал о "поисках по маске"! Пробегаться
> по каждому символу - это-ж сколько времени займёт!?
Если написать по-умному, то в один проход всё разобрать можно.
clickmaker (2008-09-09 09:38:00) [3]> Дело в том, что я что-то слышал о "поисках по маске"!
а как ты думаешь поиск по маске работает?
тоже посимвольно
Посмотри MatchesMask в исходниках Дельфи ради интереса
brother (2008-09-09 09:29:00) [4]> Пробегаться по каждому символу - это-ж сколько времени займёт!
> ?
совсем маленько)
> поисках по маске
ну бывает)
зы у тебя с каждым постом как в страшной сказке- чем дальше, тем страшнее)
New_ser (2008-09-09 09:26:00) [5]Дело в том, что я что-то слышал о "поисках по маске"! Пробегаться по каждому символу - это-ж сколько времени займёт!?
brother (2008-09-09 09:15:00) [6]> знаки пунктуации. Вот и выдергивай
это тоже учитываем...
brother (2008-09-09 09:14:00) [7]> И, всё-же, как можно "выдернуть" слово из предложения, чтобы
> проверить его наличие во втором?
бежим по предложению (читаем посимвольно в буфер (buf:=buf+фраза[текущая позиция]))... как только дошли до пробела, содержимое буфера содержит слово 8), делаем что надо со словом, очищаем буфер итд итп ))) как то так...
clickmaker (2008-09-09 09:12:00) [8]> механизм "выдёргивания"
разделители слов известны? пробелы, знаки пунктуации. Вот и выдергивай
New_ser (2008-09-09 09:07:00) [9]> brother © (09.09.08 08:45) [4]
"pos поможет", когда удастся найти механизм "выдёргивания" слова из текста. Вот тогда с помощь pos можно будет проверить его наличие во втором! )
brother (2008-09-09 08:45:00) [10]pos поможет? спраку почитай, авось сгодится)
New_ser (2008-09-09 08:43:00) [11]> убираем все не нужные символы (в том числе и не печатные)
Спасибо! Идея мне понравилась! ) Буду с ней работать!
И, всё-же, как можно "выдернуть" слово из предложения, чтобы проверить его наличие во втором? Есть вероятность, что потом придётся использовать этот механизм на целых абзацах, и там уже порядок не гарантирован! Особо буду благодарен за пример (именно выборки слова из предложения)!
brother (2008-09-09 08:14:00) [12]1. пробегам по всем строкам и убираем все не нужные символы (в том числе и не печатные)
2. приводим в нужный регистр
3. сравниваем
примеров всех пунктов в инете навалом...
MBo (2008-09-09 08:06:00) [13]заменить все разделители или слитные их комбинации на один разделитель, потом сравнивать. Можно и не заменять, а просто пропускать разделители при обработке строки