汉字的ASCII码都比字母大~~~
解决方案 »
- 感谢在keiy()的帮助下把问题解决,请keiy()进来领分
- 如何实现:一个控件移动时,另外一个控件跟着移动?
- 关于界面直接修改的问题!
- IdHTTP下载过程中程序为什么停止响应?
- 怎么实现程序象windows服务一样运行,并且还在任务管理器中关闭不了
- 如何取消查询操作?
- 我的问题还是没有解决
- 怎样在richedit1加入文本时加入格式?
- 我用Ado,用AdoDataSet控件连接一个mdb数据库,查找一条数据,找不到的情况下想adoDataSet1.active:=false,不行,提示信息是:当前为eof或bof,或记录已经删除,所需要的是当前记录。怎么回事?
- 如何用函数返回一个记录集集?
- Webbrowser控件使用小问题?
- 如何將infopower3000中的文字中文化.
var S1 , S2 : String;
pstr : PWideChar;
begin
result := 0;
S1 := Value;
while Length(S1) > 0 do
begin
GetMem(pstr,Length(S1)*2+2);
StringToWideChar(S1,pstr,Length(S1)+1);
S2 := WideCharLenToString(pstr,1);
FreeMem(pstr,Length(S1)*2+2);
S1 := Copy(S1,Length(S2)+1,Length(S1)-Length(s2));
result := result + 1;
end;
end;//while
end;
<br />var istr,str:string;
<br />i:integer;
<br />begin
<br /> istr:='f45中%过人$`国``3.,';
<br /> str:='';
<br /> for i:=1 to length(istr) do
<br /> begin
<br /> if istr[i]>chr(127) then
<br /> str:=str+istr[i];
<br /> end;
<br /> showmessage(str);//中文
<br />end;
<br />
用chr()函数先将字符转成ASCII码再判断大小
如
if (chr(str1[i])>=chr('0')) and (chr(str1[i])<=chr('9')) then
inc(numcount);
最简单的办法是:
length(yourstring)-length(widestring(yourstring))=汉字个数
2*length(widestring(yourstring))-length(yourstring)=英语个数
////////////////////////////////////////
中国使用的是汉字,而又夹杂这些英文,这样我们在数字数时就麻烦了,电脑是按字节来计算,一个汉字算两个字,而中国人的习惯是一个汉字就是一个字,所以通过电脑来计算必须解决下列问题:
利用文本控件Tmemo来存放文章,分别对中、英文的字符数进行统计,我们可以通过把字符转换为ASCII码数值来进行判断,Ord()函数就可以把字符转换为对应的数值,值33-126为键盘可使用字符,值127以上的为未知字符,即为汉字
procedure TForm1.Button1Click(Sender: Tobject);
var s:string;
I,e,c:integer;
begin
s:=memo1.text;
e:=0;c:=0;
for I:=1 to length(s) do
begin
if (ord(s[I])>=33)and(ord(s[I])<=126) then
begin
inc(e);
label1.caption:='英文字数:'+inttostr(e);
end
else
if (ord(s[I])>=127) then
begin
inc(c);
label2.caption:='中文字数:'+inttostr(c div 2);
end;
end;
end;
S: WideString;
s1: String;
intNo: Integer;
begin
S := Edit1.Text;
for intNo := 1 to Length(S) do
begin
s1 := S[intNo];
if Length(s1) > 1 then
// 汉字或双字节字符
else
// 字母或数字,或单字节字符
end;
end;用以上方法判断哪个是汉字或单字节字符。
var
i:Integer;
begin
Result:=false;//默认为英文或数字
for i:= 1 to Length(S) do
begin
if Ord(String[i])>=160
Result:=true;
break;
// 汉字符ASCII大于等于160
end;
end;