Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сравнить 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]

заменить все разделители или слитные их комбинации на один разделитель, потом сравнивать. Можно и не заменять, а просто пропускать разделители при обработке строки


Наверх

Титульная страница Поиск, карта сайта Написать письмо