各位朋友,小弟想用DELPHI写一个程序,生成一个长度固定为16位的,小写字母+数字的所有组合,请问思路如何,又或者能否提供相关的代码,请各位朋友赐教,谢谢!!!如:a123456789012345、abcdefghij123abc总之就是小写字母加数字的所有组合。

解决方案 »

  1.   

    给你做好了,给分吧
    function Get16Char:string;
    function GetOneChar(i:integer):Char;
    var
    chararray:string[36];
    begin
    chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
    result:=chararray[i];
    end;
    var
    i,ii:integer;
    begin
    result:='';
    randomize;
    for i:=1 to 36 do
       begin
       ii:=random(35);
       result:=result+GetOneChar(ii+1);
       end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    str:string;
    begin
    str:=get16char;
    showmessage(str+'   and width='+inttostr(length(str)));
    end;
      

  2.   

    function Get16Char:string;
    function GetOneChar(i:integer):Char;
    var
    chararray:string[36];
    begin
    chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
    result:=chararray[i];
    end;
    var
    i,ii:integer;
    begin
    result:='';
    randomize;
    for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串
       begin
       ii:=random(35);
       result:=result+GetOneChar(ii+1);
       end;
    end;
      

  3.   

    function Get16Char:string;
    function GetOneChar(i:integer):Char;
    var
    chararray:string[36];
    begin
    chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
    result:=chararray[i];
    end;
    var
    i,ii:integer;
    begin
    result:='';
    randomize;
    for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串
       begin
       ii:=random(35);
       result:=result+GetOneChar(ii+1);
       end;
    end;
      

  4.   

    function Get16Char:string;
    function GetOneChar(i:integer):Char;
    var
    chararray:string[36];
    begin
    chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
    result:=chararray[i];
    end;
    var
    i,ii:integer;
    begin
    result:='';
    randomize;
    for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串
       begin
       ii:=random(35);
       result:=result+GetOneChar(ii+1);
       end;
    end;
      

  5.   

    后面的是符合你的要求,前一个没看清,返回的是一个36位的字串,后一个改成你需要的了,返回一个16位的字串
    思路很简单
    首先定义一个数组,即包含小写字母和数字的数组,当然这里我直接使用了string
    其次随机字串的下标,从而得到一个字符,循环16次,即得到你需要的16位字串
      

  6.   

    random能生成楼主所需要的所有组合?
    答题者没看懂题目。
      

  7.   

    这个是组合问题,可以看看我的Blog高效率的排列组合算法
    http://www.caozu.com/hey/u/ccdarkness/20079261644.shtml高效率的排列组合算法 delphi实现代码
    http://www.caozu.com/hey/u/ccdarkness/200792704445.shtml
    combination(const m, r: byte): cardinal; // 组合
    var
      i, j, vLen, icount: byte;
      vn: array of byte; //下标数组
      b: boolean;
      Count: cardinal;
    begin
      setlength(vn, m); //分配m个空间
      vLen := length(vn);
      for i := 0 to r - 1 do
        vn[i] := 1;
      b := true;
      Count := 0;
      while b do
      begin
        inc(count);
        b := false;
        for i := 0 to vLen - 1 do
          if vn[i] = 0 then
            if i <> 0 then
              if vn[i - 1] = 1 then
              begin
                b := true;
                vn[i] := 1;
                vn[i - 1] := 0;
                begin //移动1到最前端
                  icount := 0;
                  for j := 0 to i - 1 do
                    if vn[j] = 1 then
                      inc(icount);
                  for j := 0 to i - 1 do
                    if j < icount then
                      vn[j] := 1
                    else
                      vn[j] := 0;
                end;
                break;
              end;
      end;
      result := count;
    end;
      

  8.   

    算法爆简单,代码爆麻烦的写法
    program Project6;{$APPTYPE CONSOLE}uses
      SysUtils;const
      allchars = '1234567890abcedfghijklmnopqrstuvwxyz';var
      i,j,k,l : integer;
    begin
      for i := 1 to Length(allchars) do
        for j := 1 to Length(allchars) do
          for k := 1 to Length(allchars) do
            for l := 1 to Length(allchars) do
              WriteLn(allchars[i] + allchars[j] + allchars[k] + allchars[l]);  ReadLn;
    end.
    这只是四位的。