运行以下代码会死循环:
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;却没错。

解决方案 »

  1.   

    s:='asda asdas a asdasd';
      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;
      

  2.   

    while pos(' ',s)>0 do
       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后条件就不成立,不会死循环
      

  3.   

    实现Convert spaces to zeroes 功能
    直接用stringreplace(s,' ','0',[])不就完了?
      

  4.   

    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));
          delete(s,k+1,i-1);//加上就好了
          k:=i+1;
       end;
       for i:=0 to ss.count-1 do
            showmessage(ss.Strings[i]);
    end;
      

  5.   

    sorry 没看清楚你的提问:(while pos(' ',s)>0 do//由于你没有改变s,所以pos(' ',s)肯定一直为>0,而且始终在第一条!
       begin
         i:=pos(' ',s);
          ss.add(copy(s,k,i-1));
          k:=i+1;
    ////添加一句S[Pos(' ', S)] := '0';,改变s的' ',使循环可以向后执行
       end;