str := 'abcd感谢csdn的大牛们,csdn牛牛祝大家新年快乐健康.'就比如上面的字符串, 我已经搞了个函数拿到了字数(英文中文都视一个字),
但我现在要把上面的字符串每5个字分为一段一段的,  效果如果1 := 'abcd感'; //每五个字分截取为一段.
2 := '谢csdn';
3 :=  '的大牛们,';
.....有中文英文的应该怎么截取, 可不能用个lenght得字节啊, 这不准的,它是认为英文一个字节,中文两个字节这样的.~ 直接copy也不得,遇到中文会出现 截了字的一半.拆为tstringlist吗  有没更好的办法或函数的..

解决方案 »

  1.   

    可以通过判断ascii码值不就行了吗0-127
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      k, n: integer;
      ch: byte;
      s, sData: string;
    begin
      sData := Edit1.Text;
      k := 1;
      s := '';
      n := 0;
      while k <= Length(sData) do
      begin
        ch := Byte(sData[k]);
        if Windows.IsDBCSLeadByte(ch) then
        begin
          s := s + Copy(sData, k, 2);
          Inc(k);
        end
        else
          s := s + sData[k];
        Inc(n);
        Inc(k);
        if n mod 5 = 0 then
        begin
          Memo1.Lines.Add(s);
          n := 0;
          s := '';
        end;
      end;
    end;