如何判断一个字符是否是中文?(200分)

  • 主题发起人 主题发起人 nickle
  • 开始时间 开始时间
N

nickle

Unregistered / Unconfirmed
GUEST, unregistred user!
判断输入的一段字符哪些是中文,哪些是英文或数字?
用什么方法,有没有现成的空件?
 
取出来看用ASCII比较

可能也不是很准的呀
 
搜索一下,有很多这样的问题。我曾经找过,不想照抄:)
 
汉字占2个BYTE,你只要检查它的第一的BYTE如果大于127就表明是汉字
 
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2:array[0..2] of char;
b:byte;
i:integer;
begin
caption:='';
s1:='我'; s2:='me';
if windows.isDBCSLeadByte(byte(s1[0])) then
caption:=caption+'s1 is HZ '
else
caption:=caption+'s1 is Eng ';
if windows.isDBCSLeadByte(byte(s2[0])) then
caption:=caption+'s2 is HZ '
else
caption:=caption+'s2 is Eng ';
end;
 
c:integer;
Str:string;
astr1:Pchar;
astr:Char;
begin
c:=1;
while c<strlen(pchar(Str))+1 do
begin
astr1:=pchar(copy(Str,c,1));
astr:=astr1^;
if ord(astr)>128 then
begin
//是汉字;
end
else
begin
//非汉字;
end;
end;
end;
 
再一个办法,请用
StrByteType(PChar(Value), index) = mbSingleByte
StrByteType(PChar(Value), index) = mbTrailByte 来判断
 
//只要把string转换成 widestring,然后 如果长度 大于1 代表亚洲字符
function howmanychinese(const s:string):integer;
var c:string;
sw:widestring;
i,wcount:integer;
begin
sw:=s;
wcount:=0;
for i:=1 to length(sw) do
begin
c:=sw;
if length(c)>1 then inc(wcount);
end;
result:=wcount;
end;
 
linbz兄:
你的循环好象没结束的那一天吧,呵呵!
 
linbz兄思路正确,但是并不能判断,以下是我的方法:

function GetStrType(aChStr:string):String;
var
sChar : string;
bNeedNext : Boolean;
i : integer;//Looper
begin
Result := '';
bNeedNext := false;
sChar := '';
for i := 1 to Length(aChStr) do
if Ord(aChStr) <= 127 then
Result := Result + 'E'
else
begin
bNeedNext := not bNeedNext;
sChar := sChar + aChStr;
if bNeedNext then continue;
Result := Result + 'C';
sChar := '';
end;//case
end;
 
多谢各位,我试一下。
 
多人接受答案了。
 
后退
顶部