财管家 首页
当前位置:主页>delphi7/进销存和数据库> 文章内容

救急,随机字符串的位数出错

发布时间:2011-01-05 | QQ免费站
1楼: var
str,mystr : string;
i: integer;
begin
str :='abcdefghijklmnopqrstuvwxyz';
randomize;
for i :=1 to 10 do
mystr :=mystr+str[random(length(str)-1)];
showMessage(intToStr(length(mystr)));
showMessage(mystr);
end;
为什么得到的结果的位数不是10位啊?我用length函数测mystr的长度得到的结果是10位,可是用showMessage(mystr)显示的却没有10位啊,该怎么办?

2楼: 我Copy的你的代码测试的,没有问题就是10位,你再看看

3楼: 你好,多谢你的测试!
可能是我没说清楚,其实并不是每次都不是10位,而是比方说执行10次,其中有1-2次是没有10位的。
后来我用调试来看每行代码运行的情况,发现在没有10位时是由于在字符串的中间被加入了#13这样的字符,使得它以后的字符都被砍断了。

4楼: var
str,mystr : string;
i: integer;
begin
str :='abcdefghijklmnopqrstuvwxyz';
randomize;
for i :=1 to 10 do
mystr :=mystr+ copy(str,random(length(str)-1),1) ;

edit1.text:=inttostr(length(mystr))+'/'+mystr;
end;


delphi5测试通过如 速达

5楼: var
str,mystr : string;
i: integer;
begin
str :='abcdefghijklmnopqrstuvwxyz';
randomize;
mystr:='';
for i :=1 to 10 do
mystr :=mystr+str[random(length(str)-1)+1];
showMessage(intToStr(length(Trim(mystr))));
showMessage(mystr);
end;
//说明一下:mystr :=mystr+str[random(length(str)-1)];中[random(length(str)-1)]可能会是0 ,出现这个数的结果就变成mystr:=mystr+str[0];造成越界.

6楼: 也就是从str[1-26]不是str[0-25]

7楼: 多谢ahhlian,隐士山人 以及 学习delphi 的热心指点。要不是你们的指点,我还一直以为字符串中的第一个字符是从str[0]开始的呢。
我又测试了一下ahhlian和隐士山人的代码,发现会造成字符串的最后一个字符没有被包含进去。为了方便测试,我只在字符串中取了abc三个字符。
以下是我在delphi5中测试通过的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
str,mystr : string;
i: integer;
begin
str :='abc';
randomize;
for i :=1 to 3 do
mystr :=mystr+ copy(str,random(length(str)+1),1) ;
edit1.text:=inttostr(length(mystr))+'/'+mystr;


end;

procedure TForm1.Button2Click(Sender: TObject);
var
str,mystr : string;
i: integer;
aChar : char;
begin
str :='abc';
randomize;
memo1.clear;
for i :=1 to 3 do
begin
aChar :=str[random(length(str))+1];
mystr :=mystr+aChar;
memo1.lines.Add(aChar);
end;
edit3.text:=inttostr(length(mystr))+'/'+mystr;
end;