谁会给我看一下并尝试运行这段代码为什么不能执行?我想给字符串加密,十分感谢!(30分)

X

xhqing

Unregistered / Unconfirmed
GUEST, unregistred user!
谁会给我看一下并尝试运行这段代码为什么不能执行?我想给字符串加密,十分感谢!
function jm(beforeStr:string):string;
var key:string;
i:integer;
begin
key:='password ASCII jm';
beforeStr:=copy(beforeStr,1,20);
key:=copy(key,1,20);
result:='';
for i:=1 to 20 do
begin

result:=chr(swap(ord(beforeStr) xor ord(key)));
end;

end;
程序能编绎通过,可是执行到result:=chr(swap(ord(beforeStr) xor ord(key)));
时停下来了,并且是在最后的循环时出现错误的,为什么呢?
 
你的字符串 beforestr和key不够20个字符吧
 
tseug,您好:
我的字符串 beforestr和key在很多时候是不够20个字符, beforestr是代表加密前的字符串,是密码,如果一定要20个字符,那就不好,那样,输入时是很别扭的,有时有,有时可能会多于20个字符,那程序该怎样修改呢?既符合实际输入需要,又能正确运行呢?
 
如果改动如下,也不行
fnction jm(beforeStr:string):string;
var key:string;
i:integer;
begin
key:='password ASCII jm';
result:='';
for i:=1 to length(beforeStr) do
begin
result:=chr(swap(ord(beforeStr) xor ord(key)));
end;

end;
 
如下:
function jm(beforeStr:string):string;
var
key: string;
i, Len: integer;
begin
Len := Length(beforeStr);
key := 'password ASCII jm';
//beforeStr:=copy(beforeStr,1,20);
if Length(key) > Len then
key:=copy(key,1,Len)
else
while Length(key) < Len then
key := key + ' ';
SetLength(Result, Len);
for i:=1 to Len do
begin
result:=chr(swap(ord(beforeStr) xor ord(key)));
end;
 
unction jm(beforeStr:string):string;
var
key:string;
i:integer;
begin
key:='password ASCII jm';
result:='';
for i:=1 to length(beforeStr) - 1 do
begin
result:=chr(swap(ord(beforeStr) xor ord(key)));
end;
end;
 
nicai_wgl您好:
您的程序运行通过,[但要把"while Length(key) < Len then"的"while"改为"if"],您的算法对, 非常感谢您,可是不好意思,我还想请教一下:
如果我只想保存并加密用户输入的密码的前20个字符,是不是加上beforeStr:=copy(beforeStr,1,20);这一句就可以了("保存"的函数我已写好并运行测试通过),您现在把这句
注释掉了
另外,我把else
if Length(key) < Len then
key := key + ' ';这句删除了,也运行通过,为什么Length(key) < Len 时不设置key字符串的长度也行呢?

说明:Johnny_du改动的程序是运行不能通过
 
好像swap系统函数有点BUG
 
顶部