切割包含汉字的string(100分)

  • 主题发起人 主题发起人 太阳火
  • 开始时间 开始时间

太阳火

Unregistered / Unconfirmed
GUEST, unregistred user!
如何分割包含汉字的string,使得保证汉字不会被一分为二?
 
用 IsDBCSLeadByte() 测试字符(字节),
如果是,则表示是汉字(DBCS),则应跳过两字节;
否则为单字节字符(ASCII)
 
GB码中汉字的首字符的范围是:0xA1-0xFE
下面的过程可以将一个含有汉字的字符串中前N个字符Copy出来(如果遇到最后一个字符是汉字
首字符的情况,只会复制n-1个字符)
function CopyGBText(Str:String;n:Integer):String;
var
i:Integer;
begin
i:=0;
while i<n do
begin
Inc(i);
if Byte(Str) in [$a1..$fe] then //是汉字首字符
begin
if i>n-1 then
break;
Inc(i);
end;
end;
Result:=Copy(Str,1,i);
end;
 
function CopyText(Str:String;n:Integer):String;
var
t:WideString;
begin
t:=str;
Result:=Copy(t,1,n);
end
 
to onedolph
你个方法有用吗??我曾经看过有关例子,也试过,不行呢,,,不知道你的代码行不行
 
多谢各位,不过我后来用chartobytelen和chartobyteindex两个函数搞定了。
 
to 枫,
当然有用了,怀疑我没试过?
那你吧这段代码拿回去试试。另(我用Delphi5,不知你用什么。)

procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
a:WideString;
b:string;
begin
str:='一2三4五六7';
a:=str;
b:=copy(a,1,2);
ShowMessage(b);
b:=copy(a,1,3);
ShowMessage(b);
end;

to 太阳火,
搞定了就给份呀,平均分配吧。
 
分我给了前两位
 
后退
顶部