运行以下代码会死循环:
var
s:string;
i,k:integer;
ss:tStrings;
begin
s:='asda asdas a asdasd';
if pos(' ',s)>0 then
ss:=tStringlist.create;
k:=1;
while pos(' ',s)>0 do
begin
i:=pos(' ',s);
ss.add(copy(s,k,i-1));
k:=i+1;
end;
for i:=0 to ss.count-1 do
showmessage(ss.Strings[i]);
end;
请教高手问题出在哪儿?谢谢!而
var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeroes }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;却没错。
var
s:string;
i,k:integer;
ss:tStrings;
begin
s:='asda asdas a asdasd';
if pos(' ',s)>0 then
ss:=tStringlist.create;
k:=1;
while pos(' ',s)>0 do
begin
i:=pos(' ',s);
ss.add(copy(s,k,i-1));
k:=i+1;
end;
for i:=0 to ss.count-1 do
showmessage(ss.Strings[i]);
end;
请教高手问题出在哪儿?谢谢!而
var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeroes }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;却没错。
if pos(' ',s)>0 then
ss:=tStringlist.create;
k:=1;
while pos(' ',s)>0 do //你的循环pos(' ',s)始终都为一个数值.要不你就每次都截断
begin //S:=copy(s,i+1,length(trim(s));
i:=pos(' ',s);
ss.add(copy(s,k,i-1));
k:=i+1;
end;
begin
i:=pos(' ',s);
ss.add(copy(s,k,i-1));
k:=i+1;
end;你的循环中s没有改变,所以pos(' ',s)>0一直成立,需要改变s或改变循环条件var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeroes }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;却没错。
因为 S[Pos(' ', S)] := '0'; 这句已将S改变,所以当' '都变为0后条件就不成立,不会死循环
直接用stringreplace(s,' ','0',[])不就完了?
s:string;
i,k:integer;
ss:tStrings;
begin
s:='asda asdas a asdasd';
if pos(' ',s)>0 then
ss:=tStringlist.create;
k:=1;
while pos(' ',s)>0 do
begin
i:=pos(' ',s);
ss.add(copy(s,k,i-1));
delete(s,k+1,i-1);//加上就好了
k:=i+1;
end;
for i:=0 to ss.count-1 do
showmessage(ss.Strings[i]);
end;
begin
i:=pos(' ',s);
ss.add(copy(s,k,i-1));
k:=i+1;
////添加一句S[Pos(' ', S)] := '0';,改变s的' ',使循环可以向后执行
end;