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