下面这段代码为什么会没有效果?(10分)

  • 主题发起人 主题发起人 sh8888
  • 开始时间 开始时间
S

sh8888

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这段代码为什么会没有效果?抱歉,我只有10分!

//统计中英文字个数

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)=33)and(ord(s)=126) then
begin inc(e)

label1.caption:='英文个数:'+inttostr(e)

end else if
(ord(s)=127) then
begin inc(c)

label2.caption:='中文个数:'+inttostr(c div 2)

end

end

end;
 
1、用isdbcsleadbyte判断。
2、使用widestring。
 
設置斷點去一個個檢查吧
 
不该用等号吧,该用>或<号
 
修改成如下的程序:
跟 kaideng 的说的一样
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)>=33)and(ord(s)<=126) then
begin inc(e)

label1.caption:='英文个数:'+inttostr(e)

end else if
(ord(s)>127) then
begin inc(c)

label2.caption:='中文个数:'+inttostr(c div 2)

end

end

end;
 
1.设置Form的Font:宋体,小五
2.代码
procedure TForm1.Button1Click(Sender: TObject);
var
s:widestring;
i,e,c:integer;
begin
s:=memo1.text;
e:=0;
c:=0;
for i:=1 to length(s) do
begin
if (ord(s)>=33)and(ord(s)<=126) then
inc(e)
else if (ord(s)>=127) then
inc(c);
label1.caption:='英文个数:'+inttostr(e) + ' 个';
label2.caption:='中文个数:'+inttostr(c) + ' 个';
end;
end;

3.Win2000+D5下调试成功

 
你还应该注意一点,当查到一个字符>=128时,要跳过2各字符查下一个,因为汉字的两个assic码
中的第二个可能在33--126之间,哈哈,我刚做完一套这种东西。其实注意的还要很多哦,慢慢摸索吧
 
用WideString。
procedure TForm1.Button1Click(Sender: TObject);
var
s:widestring;
TempStr:String;
i,e,c:integer;
begin
s:=memo1.text;
e:=0;
c:=0;
for i:=1 to length(s) do
begin
TempStr:=s;
if Length(TempStr)=1 then
inc(e)
else
inc(c);
label1.caption:='英文个数:'+inttostr(e) + ' 个';
label2.caption:='中文个数:'+inttostr(c) + ' 个';
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
character,i,characterenglish,characterchinese:integer;
str:string;
begin
i:=1;
character:=0;
str:=memo1.Lines.Text;
if length(str)>0 then
while not(i>length(str)) do
begin
if (ord(str)=32) then
i:=i+1
else if(ord(str)=13) then
i:=i+2
else
begin
if(ord(str)>=129) and(ord(str)<=254) and (ord(str[i+1])>=64) and (ord(str[i+1])<=254) then
begin
i:=i+2;
character:=character+1;
characterchinese:=characterchinese+1;
end
else
begin
i:=i+1;
character:=character+1;
characterenglish:=characterenglish+1;
end;
end;
end;
label1.caption:='总共字符'+inttostr(character);
label4.Caption:='中文字符'+inttostr(characterchinese);
label6.Caption:='英文字符'+inttostr(characterenglish);
end;
有一个memo控件.try it...
 
后退
顶部