Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   перебор символов(DELPHI) (https://forum.antichat.xyz/showthread.php?t=193712)

qwerty001 05.04.2010 20:26

перебор символов(DELPHI)
 
подскажите пожалуйсто как организовать перебор всех возможных вариантов символов?
например:
a
..
z
aa
ab
..
az
..
ba
bb
..
bz
..
zz
aaa
aab
...
zzz
....
zzzzzzz.........

GhostOnline 05.04.2010 20:30

Всех вариантов - бесконечное количество (т.к. ты макс. длину не указал)
А как можно организовать бесконечное?

fenixelite 05.04.2010 20:46

Допиши условие, тогда уже можно будет обсуждать как сделать!

qwerty001 05.04.2010 20:59

условие - подобрать пароль методом перебора символов. длину пароля не знаю. (: если не сложно подскажите как такое организовать.

Jingo Bo 05.04.2010 21:04

Кури перевод чисел из одной системы счисления в другую, в твоём случае основатель системы 26(число англ. букв), каждый разряд будет в диапазоне [0..25], перевести тебе надо будет из десятичной в то которую я указал. Потом получаное число прогоняем по всем разрярам и к разряду прибавляем 0x61 и поучлаем нужный символ, профит?:)

qwerty001 05.04.2010 21:13

не профит. я ничего не понял. =\

qwerty001 05.04.2010 21:15

а если ещё цифры вкючить и символы в перебор?

Jingo Bo 05.04.2010 21:19

Эх, щас напишу тада как это сделать

JnK 05.04.2010 21:25

Цитата:

Сообщение от qwerty001
условие - подобрать пароль методом перебора символов. длину пароля не знаю. (: если не сложно подскажите как такое организовать.

1. В бесконечном цикле пробегать по ASCII отвечающий за буквы, цифры.
Код:

myChar := Chr(66);                // Использование Char для конвертирования
Подробнее

2. Объявить в const базу пароля и по ней пробегать в цикле.

Вот пример как реализовывать через const:
PHP код:

const 
  
m='qwertyuioplkjhgfdsa'// база  
Var  
  
i,j:integer;  
  
s,str:string;  
begin  
  str
:='';  
  for 
j:=1 to 15 do  // кол-во символов*на базу
  
begin   
    
for i:=1 to length(m) do   
    
begin  
      s
:=str+m[i]; 
      
memo1.Lines.Add(s);    // что то делаем с генер, строкой
    
end;    
  
str:=s
  
end;
end

P.s. но лучше сделать 1 циклом, например в While (i=255) do.

Jingo Bo 05.04.2010 21:28

Код:

const ci_interval = 26; {â àãë. ñëîâàðå 26 áóêàô:)}
      ci_index = $61; { èíäåêñ ñèìâîë "à" â ascii}

function IntToSymbols(Const bound : Cardinal) : String;
Var i, curBound, c_mod : Cardinal;
    c_tmp : Char;
Begin
    Result := '';
    curBound := bound;
    while true do
    Begin
        if curBound < ci_interval then
        Begin
            Result := Result + Chr(ci_index + curBound);
            Break;
        end;
        c_mod := curBound mod ci_interval;
        curBound := curBound div ci_interval;
        Result := Result + Chr(ci_index + c_mod);
    end;
    {ïåðåâîðà÷èâàåì ñòðîêó}
    for i := 1 to Length(Result) div 2 do
    Begin
        c_tmp := Result[i];
        Result[i] := Result[Length(Result)-i+1];
        Result[Length(Result)-i+1] := c_tmp;
    end;
end;

Используем так :
Код:

procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
begin
    for i := 0 to *сколько надо вариантов* do
    Memo1.Lines.Add(IntToSymbols(i));
end;

Будет выводить
a
b
c
..
z
aa
ab
ac
...


Время: 01:41