![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Алгоритм для выделенияслов из строки [D7, XP]
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() и т.п.