一串字符串要取一指定长度的子串怎样取才不会有乱吗?(字符串为中英文混合)(50分)

  • 主题发起人 主题发起人 am2001
  • 开始时间 开始时间
A

am2001

Unregistered / Unconfirmed
GUEST, unregistred user!
如一字符串长度有230个字符,现要取140个左右字符,怎样取最后一个才不会是乱码?
 
见笑,我写错了,思考中
 
试试用
widestring;
 
函数如下,可以实现,但是好笨![:(]
哪位高手有更好的办法,贴出来

function GetSubStr(OldStr: string; Start, Len: Integer): string;
//OldStr: 目标字符串
//Start:起始截取位置
//Len:截取长度
//函数返回包括完整汉字的子串
var
i: Integer;
begin
i := Start; //起点
while i > 0 do
begin
if Ord(OldStr) < 128 then
Break; //找到起始的第一个英文字符,下一个应该是连续汉字的第一字节
i := i - 1;
end;
if Start <> i then
if ((Start - i) mod 2) = 0 then //起点是汉字的第二字节
Start := Start + 1; //调整起点

i := Start + Len - 1; //结束点
while i >= Start do
begin
if Ord(OldStr) < 128 then
Break; //找到起始的第一个英文字符,下一个应该是连续汉字的第一字节
i := i - 1;
end;

if ((Start + Len - i) mod 2) = 0 then //结束点是汉字的第二字节
Len := Len + 1; //调整结束点

Result := MidStr(OldStr,Start,Len)
end;

 
你最好使用WideString类型的字符串,应注意:当字符串中包括中文等widechar字符时,
用length取字符串长度时,如果字符串是string类型,则一个wide字符会被当作2个长度,
而如果是widestring类型,则一个wide字符只有一个长度,而串中的ansichar字符,
仍然是占1个长度。
 
谢了!!!
 
后退
顶部