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

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

Алгоритм для выделенияслов из строки [D7, XP]


Страницы:   1 2

bioss ©   (2008-12-23 17:59:00) 

Ув. Мастера, подскажите пожалуйста простой и эффективный алгоритм выделения слов из строки. Есть переменная содержащая строку, слова этой строки надо занести в массив.


AndreyV   (2008-12-25 10:43:00) [1]

> [28] Ega23 ©   (25.12.08 09:58)
> Это ты меня спрашиваешь?

Нет. Я тебя только повторяю. :)


Ega23   (2008-12-25 09:58:00) [2]


> Сколько слов?


Это ты меня спрашиваешь? Так я не знаю. Определения "слово" ещё не было...  :)))


AndreyV   (2008-12-25 09:14:00) [3]

> [21] Ega23 ©   (24.12.08 13:08)
> Дык в том-то и дело, что неизвестно, что нужно автору. Просто
> в первых же постах пошло, что это сделать - элементарно.
> Авотфиг. Не всё так просто, на самом деле.

Вот ещё пример:
Как-то - непросто поступить с символои "-".
Сколько слов?


Ega23   (2008-12-24 14:03:00) [4]


> Я к тому, что пока нет четкого определения, что есть "слово",
>  про которое спрашивал автор, обсуждение бессмысленно...


Заметь, я это ещё в [4] спросил...  :)


clickmaker   (2008-12-24 14:01:00) [5]

тут обратил внимание, что Блокнот считает словом все кроме пробела


Johnmen   (2008-12-24 13:56:00) [6]

:)
Я к тому, что пока нет четкого определения, что есть "слово", про которое спрашивал автор, обсуждение бессмысленно...


Ega23   (2008-12-24 13:53:00) [7]


> Двубайтовых беззнаковых целых?


Уел. ЗачОт. :)


Johnmen   (2008-12-24 13:47:00) [8]


> Пи = 3.14159
> Сколько слов?

Двубайтовых беззнаковых целых?


Ega23   (2008-12-24 13:08:00) [9]


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


Да вот не только в цифрах. А.С.Пушкин, например.


> Автору проще нужно же :)


Дык в том-то и дело, что неизвестно, что нужно автору. Просто в первых же постах пошло, что это сделать - элементарно. Авотфиг. Не всё так просто, на самом деле.


{RASkov}   (2008-12-24 12:58:00) [10]

> [19] Ega23 ©   (24.12.08 12:38)
> Сколько слов?

Зависит от того, какие разделители указаны.... Это в простом случае.... В "сложном", нужно еще учитывать где эти разделители, например, в находясь цифрах - точка может быть и не разделителем...
Автору проще нужно же :)


Ega23   (2008-12-24 12:38:00) [11]


> Тут я ошибся.... Т.е. тут можно "ловить" как разделители,
>  так и не разделители....
> При условии:
>   "когда встречается первый неразделитель"
> должно быть так:


Пи = 3.14159
Сколько слов?


{RASkov}   (2008-12-24 11:59:00) [12]

> это когда встречается первый неразделитель


> Flag:=Ch = Razdelitel;

Тут я ошибся.... Т.е. тут можно "ловить" как разделители, так и не разделители....
При условии:
  "когда встречается первый неразделитель"
должно быть так:
  Flag:=Ch <> Razdelitel;
или вариант:
  Flag:= not (Ch In Razdelitels);
где Razdelitels - это уже не один, а группа символов разделителей type TRazdelitels = Set of Char;


{RASkov}   (2008-12-24 11:55:00) [13]

> у него даже код скопитырнутый есть по выдергиванию слов...

Т.е. я не хочу сказать, что "его" код хорошее, грамотное и красивое решение...


> идем в цикле по строке и ищем очередной разделитель слова
> или границу слова.

запоминаем начало слова(это когда встречается первый неразделитель) когда после этого встретили разделитель, то
Slovo:=Copy(Text, Nachalo, CurrNomCh-Nachalo);
Nachalo - первый символ в слове.
CurrNomCh - текущий номер символа в общем тексте, например: for CurrNomCh:= 1 to Length(Text) do...

Для этой задачи нужно запоминать последнее и текущее состояние символа в строке(т.е. можно булевый флаг) Примерно:
OldFlag:=Flag;
Flag:=Ch = Razdelitel;
И анализируя их изменения делать выводы о очередном слове....


Ega23   (2008-12-24 11:45:00) [14]


> А что есть "слово"?


двубайтовое беззнаковое целое?


Медвежонок Пятачок   (2008-12-24 11:42:00) [15]

это все не алгоритмы. алгоритм один единственный.
идем в цикле по строке и ищем очередной разделитель слова или границу слова.


{RASkov}   (2008-12-24 11:39:00) [16]

> [0] bioss ©   (23.12.08 17:59)
> Ув. Мастера, подскажите пожалуйста простой и эффективный
> алгоритм выделения слов из строки.

Примерно [2]
т.е. методами TStringList'a можно простенько реализовать задуманное...

Иначе... тут вот недалеко flunkkkk решает подобную задачу.... у него даже код скопитырнутый есть по выдергиванию слов...
Или flunkkkk и биосс - это одно и тоже?)


Ega23   (2008-12-24 09:56:00) [17]


> это комбинация буквенных символов


xFF


Германн   (2008-12-24 01:39:00) [18]


> Тын-Дын ©   (23.12.08 22:38) [11]
>
> Супротив всего флуда, что тут был, скажу, что слово - это
> комбинация буквенных символов. Этого достаточно для реализации
> алгоритма.
> И это достаточно просто.
>

Тогда дай ссылку на точное определение выдуманного тобой термина "буквенный символ".
Или дай своё описание данного термина. Но тогда уж не обессудь! :)
Отметелим по полной, если что не так скажешь!
А ведь если скажешь, то, уверен, что не грамотно. :)
P.S. Не хочу "враждовать" с тобой. Может тебе лучше перейти на другой форум? Их есть.


Тын-Дын   (2008-12-23 22:38:00) [19]

Супротив всего флуда, что тут был, скажу, что слово - это комбинация буквенных символов. Этого достаточно для реализации алгоритма.
И это достаточно просто.


Eraser   (2008-12-23 22:17:00) [20]

> [9] programmer90   (23.12.08 22:06)


> К слову, слово состоит из букв, пробел не входит состав
> слова,и знаки пунктуации тоже)))надо только действовать
> Подумайте как усовершенствовать алгоритм, чтобы обрести
> полную независимость...

кстати в Д2009 появился замечательный класс TCharacter, там есть функции TCharacter.IsLetter(), TCharacter.IsLetterOrDigit() и т.п.


Страницы:   1 2

Наверх

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