Delphi функция получения случайного слова из строки

Собственно возникла такая необходимость в одной из программ вытаскивать случайное слово из строки, самому писать было лень, гугление не принесло результатов, пришлось вспомнить былые годы и напрячь мозговые центры ))))
Ничего сложного нет, алгоритм прост, хотя я и не настаиваю на его универсальности и простоте, кому как, но на скорую руку написал следующее, в двух словах по алгоритму, в строке выдергиваем случайный символ, и если это не пробел, то увеличиваем номер символа пока не получаем пробел (банально )))), после удалем из строки все символы, начиная с первого, заканчивая пробелом, далее копируем в результат все, начиная с первого символа, заканчивая пробелом, номер символа которого мы получим из Pos(' ', str).
Хватит бесполезной болтовни, вот вам функция:
function GetRandomWord(Str: string): string; //функция получения случайного слова из текста |
Sl:= Length(Str); //длина строки |
Randomize; //инициализируем генератор случайных чисел |
while Str[rd]<>' ' do Inc(rd); //ищем пробел |
Delete(Str, 1, rd); //удаляем все до пробелам |
Result:= Copy(Str, 1, Pos(' ', str)-1); //результат с первго символа до пробела |
З.Ы. пипец накрутил с описанием алгоритма, надо было схемой зарисовать,ну ладно, может в следующий раз, а пока что, если что не ясно, не стесняемся, пишем
24.02.2014 в 21:13
· Ссылка
Как я писал в статье, гавнокодил на скорую руку, поэтому не настаиваю на его универсальности, многих проверок не делал, т.к. исходный текст всегда содержал пробелы, но в целом согласен, добавить проверку на наличие пробела можно, например добавить условие, проверяющее, Pos (' ', str), чтобы не было равно нулю.
24.02.2014 в 16:01
· Ссылка
95% кода в интернете — говно. Случайно наткнулся на данную чудо-функцию. И вот какие соображения.
Чтобы выбрать именно СЛУЧАЙНОЕ слово из строки, надо для начала хотя бы знать количество этих слов. Что, если в строке вообще нет пробелов? Тогда функция отработает неправильно.
Далее, ищем пробел, удаляем всё до пробела, и затем:
Result:= Copy (Str, 1, Pos (' ', str)-1)
Занимательно. А что, если пробела в str не будет? Благо, Copy таки отработает. И слава Богу.