很菜的问题,如何判断输入的是字母还是汉字。(100分)

  • 主题发起人 主题发起人 逸飞
  • 开始时间 开始时间
定义一个字符集合,看看是不是在里面就可以了.
 
怎么做能写出代码吗
 
判断第一个字符是否小于200!
 
用函数 bytetype
 
这样?
procedure TForm1.Edit1KeyPress(Sender: TObject
var Key: Char);
begin
if (Key in ['a'..'z','A'..'Z']) then
ShowMessage('字母');
end;
 
有过一个拼音检索的程序代码,定义的是按区位码来区分汉字的,
这样就可以把汉字检索出来了,代码可以到www.csdn.net的文档中心查找.
 
BBK是对的,补充一下~~``
if (Key in['0'..'9',#8]) then //#8为回车键
ShowMessage('数字');
if (Key in ['a'..'z','A'..'Z',#8]) then
ShowMessage('字母');

 
IsDBCSLeadByte
才是根本解决之道

这个api函数可以用来判断一个char是否是双字节(例如汉字)的字符的第一个字节。

如果一定要判断是否是汉字,可以用IsDBCSLeadByteEx,可以指定Code page.

ISDBCSLeadByte:可以在win32 help中找
 
to ReStart:

我好象#13是回车
 
to ReStart:
#8是退格键呀

你的代码大概是从限定输入为整数的函数里拷来的
但#8毕竟不是整数

问题中要求判断输入的是英文还是汉字
大概和你们回答的不太一样罢

yifeng 的答案是正确的
 
下面的代码,可以轻松判断,你一串字符串中是否包含汉字。

var
s: String;
ws: WideString;
begin
s := '我a';
ws := s;
if Length(s) = Length(ws) then
ShowMessage('s中没有汉字!')
else ShowMessage('s中有汉字!');
end;
 
同意pine_ant的看法,用函数 bytetype
 
据说这些处理双字节的函数对大五码/国标码不一定都能识别。
 
汉字及其它东方字都是由双字节构成,而它的第一个字节是ASCII中128-255的字符,
第二个字节就可能是0-255的字符.
而西方文字都是由前0-127字符组组成:
所以
S:String;
C:Char;
C:=Copy(S,1,1)
if ORD(C)<128 then
'西文'
Else
'双字节文字'
 
if key in LeadBytes then
begin
//key就是国际码的(在这里是中文)xixi
end;
 
我昨天的回复怎么不见了?
key in LeadBytes then
begin
//key是国际码(在这里是中文)
end;
 
nToLen := length(Form1.combobox1.Text);
k :=1;
while k <nToLen do begin
stemp:=copy(Form1.combobox1.Text,k,2);
if (ord(stemp[1])<$a0) then
begin
Form1.label1.Caption :=sTemp;
Form1.label2.Caption :='不是汉字,请输入汉字';
exit;
end;
一个汉字由两个字节组成,要判断连续的两个字节是否汉字,
关键是看其第一个字节是否满足 >=$a0 条件, 这个条件对GBK汉字都适用

而如果一个汉字是GB2312中定义的最常用的6763个汉字,
则第一个字节和第二个节字都必须满足>=$a0 条件的条件
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=667019
 
方法一:
Procedure determine
var
s:string //变量S是用来存放输入的数据
Begin
if s in ['0'..'9'],['a'..'z','A'..'Z']
then s存放的是字母
else S存放的是其它的,不一定是汉字
End;
方法二:
S:String;
C:Char;
C:=Copy(S,1,1)
if ORD(C)<128 then
'西文'
Else
'双字节文字'

 
后退
顶部