如有下面这样一个字符串:
str1:='75800487    002712   03060000       0801181740   5183641070026181          912222  000000459505    消费      81.00             80.19             0.81'str2:='75800487    002713   01025800       0801194933   4518105868007521                  000000579648    消费      26.10             25.84             0.26'str1为 11 个 短串
str2为 10 个 短串要求在最短的时间内判断出来,因为这只是一文本内的两行而已,整个文体有上万行,每行都需要进行判断!

解决方案 »

  1.   

    如果中间是用空格来格开的话统计空格吧,当检查到字符串里的空格后,如果紧接着是空格就忽略,直到不是空格为止。再将统计数+1得出结果。当然要先对字符串用trim。这样只要对str检查一次。
    不知道有没有更好的办法,期待高手指教,我是菜菜鸟!!!
      

  2.   

    1。整个文体有上万行
    --减少读文件的次数才能减少操作时间吧
    2。判断短串个数
    --可以用TStringList,设置
      list.Delimiter := ' ';     //分格符
      list.DelimitedText := str1;  
      list.Count 即短窜个数
    var
      str1: String;
      list: TStrings;
    begin
      list := TStringList.Create;
      str1:='75800487    002712   03060000       0801181740   5183641070026181          912222  000000459505    秏煤      81.00             80.19             0.81';
      list.Delimiter := ' ';     //分格符
      list.DelimitedText := str1;  
      ShowMessage(IntToStr(list.Count));
      

  3.   

    for i:=1 to 5 do  //5次确保把空格换成一个,做为分隔
      begin
       str1 := StringReplace(str1,'  ',' ', [rfReplaceAll]); //把两个空格换成一个
       str2 := StringReplace(str2,'  ',' ', [rfReplaceAll]);
      end;//再用pos分出每个数据
      

  4.   

    我也遇到過這種情況, 用UntraEdit分析一下文件,其實它的分隔符不是空格(#20),是Tab字元(#09),這樣根據#09來截取就可以的了
      

  5.   

    if s[length(s)]<>' ' then count:=1 else count:=0;
      for i:=2 to length(1) do if (s[i]=' ') and (s[i-1]<>' ') then count:=count+1;
      

  6.   

    SORRY !上面的太粗心了,把S写成1了 现在更正!
    //如果字符串尾不是空格则加数量1
      if s[length(s)]<>' ' then   
        count:=1 
      else 
        count:=0;
      for i:=2 to length(s) do
        if (s[i]=' ') and (s[i-1]<>' ') then 
          count:=count+1;能解决你的问题是我最大的心愿!