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