嗨我想用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)