![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Как перемешать текст? в тексте нет пробела и должно перемешивается по 3 символа.
Кто нибудь помогите, пожалуйста. |
|
#2
|
||||
|
||||
|
Может я не так понял:
Код:
procedure TForm1.Button1Click(Sender: TObject); var i1, i2, i3: Integer; s: String; t, t2: Char; begin Randomize; i1:=Random(Length(Edit1.Text)) + 1; i2:=Random(Length(Edit1.Text)) + 1; i3:=Random(Length(Edit1.Text)) + 1; s:=Edit1.Text; t:=s[i2]; t2:=s[i3]; s[i2]:=s[i1]; s[i3]:=t; s[i1]:=t2; Edit1.Text:=s; end; |
|
#3
|
|||
|
|||
|
Мне нужно чтоб перемешивались по 3 символа и чтоб целостность этих символов не нарушалось. Например: randomize -> izedomran или domranize и тп. Заранее спасибо
|
|
#4
|
||||
|
||||
|
Вот тебе функция... (проверено - работает)
SrcStr - исходный текст. Count - по сколько разбивать. Код:
function TForm1.Scrambler(SrcStr: string; Count: integer): string;
var
S: TStringList;
i,n: Integer;
begin
Result:='';
if Count >= length(SrcStr) then
begin
Application.MessageBox('Слишком короткий текст',
'Error',mb_OK+mb_ICONERROR);
Exit;
end;
S:=TStringList.Create;
for i:=0 to (length(SrcStr) div Count) do
S.Add(Copy(SrcStr,Count*i+1,Count));
Randomize;
i:=0;
while i<>(length(SrcStr) div Count)+1 do
begin
n:=Random((length(SrcStr) div Count)+1);
if S.Strings[n]<>'*' then
begin
Result:=Result+S.Strings[n];
S.Strings[n]:='*';
inc(i);
end;
end;
S.Free;
end;Использовать так: Edit1.Text:= Scrambler('Randomize', 3); |