Показать сообщение отдельно
  #10  
Старый 23.12.2014, 19:19
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
Хорошо

Цитата:
Сообщение от Страдалецъ
Забавная задачка. Так устроит?
Код:
procedure TForm28.Button1Click(Sender: TObject);
var
  i,j: Integer;
  CharSet: String;
  SL: TStringList;

procedure Eval(S: String; Level: Integer);
var
  i: Integer;
begin
 if Level > SL.Count - 1 then Exit;
 for i := 1 to Length(SL.Strings[Level])
 do begin
    Eval(S + SL.Strings[Level][i], Level+1);
    if Level = SL.Count - 1
    then Memo1.Lines.Add(S + SL.Strings[Level][i]);
    end;
end;

begin
 Memo1.Clear;
 SL := TStringList.Create;
 SL.Delimiter := '['; SL.DelimitedText := Edit1.Text;
 SL.Delimiter := ']'; SL.DelimitedText := SL.Text;
 for j := 0 to SL.Count - 1
 do begin
    i := 1;
    CharSet := '';
    while i <= Length(SL.Strings[j])
    do begin
       if SL.Strings[j][i] in ['A'..'Z']
       then CharSet := CharSet + SL.Strings[j][i]
       else begin
            Inc(i);
            while SL.Strings[j][i] <> CharSet[Length(CharSet)]
            do CharSet := CharSet + Succ(CharSet[Length(CharSet)]);
            end;
       Inc(i);
       end;
    SL.Strings[j] := CharSet;
    end;
 Eval('', 0);
end;


Огромное Вам СПАСИБО. Буду тестировать и дорабатывать под свою задачу.
Ответить с цитированием