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 комментария. Оставить новый

  • ТрольИмбаный
    24.02.2014 16:01

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

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

    Ответить

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

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

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

Меню