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

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

Хватит бесполезной болтовни, вот вам функция:


//by username https://i-notes.org
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;

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

2 комментария. Оставить новый

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

    Ответить
  • ТрольИмбаный
    24.02.2014 16:01

    95% кода в интернете – говно. Случайно наткнулся на данную чудо-функцию. И вот какие соображения.
    Чтобы выбрать именно СЛУЧАЙНОЕ слово из строки, надо для начала хотя бы знать количество этих слов. Что, если в строке вообще нет пробелов? Тогда функция отработает неправильно.
    Далее, ищем пробел, удаляем всё до пробела, и затем:
    Result:= Copy(Str, 1, Pos(‘ ‘, str)-1)
    Занимательно. А что, если пробела в str не будет? Благо, Copy таки отработает. И слава Богу.

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Меню