在Delphi中生成三个随机字符

Jos*_*nez 9 delphi

嗨我想用Delphi中的函数生成三个随机字符,代码如下:

function generate(cantidad: integer): string;
const
  letras_mi = 'abcdefghijklmnopqrstuvwxyz';
const
  letras_ma = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const
  numeros = '0123456789';
var
  finalr: string;
begin

  finalr := '';

  finalr := finalr + IntToStr(Random(Length(letras_mi)) + 1);
  finalr := finalr + IntToStr(Random(Length(letras_ma)) + 1);
  finalr := finalr + IntToStr(Random(Length(numeros)) + 1);

  Result := finalr;

end;
Run Code Online (Sandbox Code Playgroud)

问题是,当我实际等待3个字符的常量随机变量时,像20142我回来了.

Dav*_*nan 18

您的代码将整数索引值转换为字符串.请注意,您对常量的唯一引用是采用它们的长度.您返回索引而不是字符.

您可以使用生成的整数索引来修复代码,以引用字符串常量中的元素.梅森和肯展示了如何做到这一点.

就个人而言,我会废除常数并写下来

Chr(ord('a') + Random(26))
Run Code Online (Sandbox Code Playgroud)

和

Chr(ord('A') + Random(26))
Run Code Online (Sandbox Code Playgroud)

和

Chr(ord('0') + Random(10))
Run Code Online (Sandbox Code Playgroud)

这些字符的序数值是在允许这样的代码时设计的.


Ken*_*ite 11

您将结果添加Random到您的finalr,而不是常量中的随机字母.

尝试这样的东西 - 它使用return Random作为索引到字符串常量字符:

function generate(cantidad: integer): string;
const
  letras_mi = 'abcdefghijklmnopqrstuvwxyz';
  letras_ma = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  numeros = '0123456789';
begin
  Result := '';
  Result := Result + letras_mi[Random(Length(letras_mi)) + 1];
  Result := Result + letras_ma[Random(Length(letras_ma)) + 1];
  Result := Result + numeros[Random(Length(numeros)) + 1];
end;
Run Code Online (Sandbox Code Playgroud)


Mas*_*ler 10

让我们来看看你的代码在做什么,正如编译器所看到的:

IntToStr(Random(Length(letras_mi)) + 1)

Call IntToStr on the result of:
  Call Random on the result of:
    Add
      Length(letras_mi)
      1
Run Code Online (Sandbox Code Playgroud)

IntToStr接受一个数字(例如5)并将其转换为字符串(例如'5').你想要做的是使用随机值索引到你的数组,如下所示:

letras_mi[Random(Length(letras_mi)) + 1]
Run Code Online (Sandbox Code Playgroud)