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;

З.Ы. пипец накрутил с описанием алгоритма, надо было схемой зарисовать,ну ладно, может в следующий раз, а пока что, если что не ясно, не стесняемся, пишем

Поделись с друзьями:

Опубликовано 23.06.2011 в 09:21 · Автор komivlad · Ссылка
Рубрики: Delphi, Programming · Теги: , , ,

2 комментария

Подписаться на комментарии по RSS

  1. Написал(-а) komivlad
    24.02.2014 в 21:13
    Ответить · Ссылка

    Как я писал в статье, гавнокодил на скорую руку, поэтому не настаиваю на его универсальности, многих проверок не делал, т.к. исходный текст всегда содержал пробелы, но в целом согласен, добавить проверку на наличие пробела можно, например добавить условие, проверяющее, Pos (' ', str), чтобы не было равно нулю.

  2. Написал(-а) ТрольИмбаный
    24.02.2014 в 16:01
    Ответить · Ссылка

    95% кода в интернете — говно. Случайно наткнулся на данную чудо-функцию. И вот какие соображения.

    Чтобы выбрать именно СЛУЧАЙНОЕ слово из строки, надо для начала хотя бы знать количество этих слов. Что, если в строке вообще нет пробелов? Тогда функция отработает неправильно.

    Далее, ищем пробел, удаляем всё до пробела, и затем:

    Result:= Copy (Str, 1, Pos (' ', str)-1)

    Занимательно. А что, если пробела в str не будет? Благо, Copy таки отработает. И слава Богу.

Подписаться на комментарии по RSS

Написать комментарий