如何判断一个memo里有多少个中文 ( 积分: 100 )

  • 主题发起人 主题发起人 54weige
  • 开始时间 开始时间
5

54weige

Unregistered / Unconfirmed
GUEST, unregistred user!
如何判断一个memo里有多少个中文,注:MEMO里是中文英文等字符都有的!
 
下面的函数能计算双字节字符的个数,不一定是中文,占两个字节的符合都会算进去
function CalcWCount(const AText : string):Integer;
var
v : OleVariant;
begin
v := AText;
Result := Length(AText) - Length(PWideString(@TVarData(v).VOleStr)^);
end;
 
不用memo,memo的是ansistring,那直接string型的,是for 语句从头到尾地查?
 
你根据ascii码判断,不再里面的都是中文,再结合一下两个字节

但是如果有日文,韩文等就不知道可不可以了
 
var
AllText : String;
bHalf : Boolean;
i : Integer;
nAsc : Integer;
begin
AllText := GetText(); // 取得文本
bHalf := false;
for i := 1 to Length(AllText) do
begin
nAsc := ord(AllText); // 取每个字符的ASCII代码
if bHalf then // 如果处于双字节字符的第二个字符,则忽略该字符
begin
bHalf := false;
nAsc := 0;
end;
// 如果当前字节ASCII代码>127,则认为其为双字节字符
if nAsc > 127 then
begin
if not bHalf then
汉字啦!!当然是所有的双字节字符,又是只有汉字那就是啦
bHalf := not bHalf;
end
else if (nAsc >= 48) and (nAsc <= 57) then
// 数字字符
else if (nAsc >= 65) and (nAsc <= 90) then
// 英文字母字符
else if (nAsc >= 97) and (nAsc <= 122) then
// 英文字母字符
else if (nAsc <> 32) and (nAsc <> 0) and
(nAsc <> 13) and (nAsc <> 10) then
// 其他字符

end;

end;
 
同意楼上兄弟。帮顶。
 
后退
顶部