不能统计中文的逗号,句号等符号,请问怎样修改呢??
还有程序是不是还能在简洁点??
请各位指教!!
谢谢!
以下是主要程序段
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.PasteFromClipboard;
end;procedure TForm1.Button2Click(Sender: TObject);
{var
s:string;
i,e,c:integer;
begin
edit1.clear;
edit2.clear;
edit1.text:='0';
edit2.text:='0';
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); //英文字符个数求和
edit1.text:=inttostr(e);
end
else
if (ord(s[i])>=127) then //当文本为中文字符时
begin
inc(c);
edit2.text:=inttostr(c div 2); //每个汉字占2个字节
end;
end;
end;}
var
S:String;
I,E,C,M,Q:Integer;
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit1.Text:='0';
Edit2.Text:='0';
Edit3.Text:='0';
Edit4.Text:='0';
S:=Memo1.Text;
E:=0; C:=0; M:=0; Q:=0;
//C:=0;
for I:=1 to Length(S) do
case Ord(S[I]) of
48..57:
begin
inc(M); //数字字符个数求和
edit3.text:=inttostr(M);
end;
65..90:
begin
inc(E); //英文字符个数求和
edit1.text:=inttostr(E);
end;
97..122:
begin
inc(E); //英文字符个数求和
edit1.text:=inttostr(E);
end;
33..47:
begin
inc(Q); //其他字符个数求和
edit4.text:=inttostr(Q);
end;
58..64:
begin
inc(Q);
edit4.text:=inttostr(Q);
end;
91..96:
begin
inc(Q);
edit4.text:=inttostr(Q);
end;
123..126:
begin
inc(Q);
edit4.text:=inttostr(Q);
end;
else
begin
inc(C); //中文字符个数求和
edit2.text:=inttostr(C div 2);
end
//根据字符不同进行相应处理
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Clear;
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
end;end.
还有程序是不是还能在简洁点??
请各位指教!!
谢谢!
以下是主要程序段
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.PasteFromClipboard;
end;procedure TForm1.Button2Click(Sender: TObject);
{var
s:string;
i,e,c:integer;
begin
edit1.clear;
edit2.clear;
edit1.text:='0';
edit2.text:='0';
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); //英文字符个数求和
edit1.text:=inttostr(e);
end
else
if (ord(s[i])>=127) then //当文本为中文字符时
begin
inc(c);
edit2.text:=inttostr(c div 2); //每个汉字占2个字节
end;
end;
end;}
var
S:String;
I,E,C,M,Q:Integer;
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit1.Text:='0';
Edit2.Text:='0';
Edit3.Text:='0';
Edit4.Text:='0';
S:=Memo1.Text;
E:=0; C:=0; M:=0; Q:=0;
//C:=0;
for I:=1 to Length(S) do
case Ord(S[I]) of
48..57:
begin
inc(M); //数字字符个数求和
edit3.text:=inttostr(M);
end;
65..90:
begin
inc(E); //英文字符个数求和
edit1.text:=inttostr(E);
end;
97..122:
begin
inc(E); //英文字符个数求和
edit1.text:=inttostr(E);
end;
33..47:
begin
inc(Q); //其他字符个数求和
edit4.text:=inttostr(Q);
end;
58..64:
begin
inc(Q);
edit4.text:=inttostr(Q);
end;
91..96:
begin
inc(Q);
edit4.text:=inttostr(Q);
end;
123..126:
begin
inc(Q);
edit4.text:=inttostr(Q);
end;
else
begin
inc(C); //中文字符个数求和
edit2.text:=inttostr(C div 2);
end
//根据字符不同进行相应处理
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Clear;
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;procedure TForm1.Button2Click(Sender: TObject);
var
S:TStringList; //这里最好不要使用String类型,因为在{$H-}环境下有长度限制
I,E,C,M,Q:Integer;
begin
try
S:=TStringList.Create ;
S.Text:=Memo1.Text; showmessage(s.text);
E:=0;
C:=0;
M:=0;
Q:=0;
for I:=1 to Length(S.Text) do
case Ord(S.Text[I]) of
48..57: Inc(M); //数字字符个数求和
65..90,97..122: Inc(E); //英文字符个数求和
33..47,58..64,91..96,123..126: inc(Q); //其他字符个数求和
else
inc(C); //中文字符个数求和
end;
Edit1.Text:=IntToStr(E);
Edit2.Text:=IntToStr(C Div 2);
Edit3.Text:=IntToStr(M);
Edit4.Text:=IntToStr(Q);
finally
S.Free;
end;
end;程序代码精简后是这个样子,至于你说的统计标点符号的功能,只能按照我前面说的具体符号分类统计了,无非就是Case多几个分支!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;procedure TForm1.Button2Click(Sender: TObject);
var
S:TStringList; //这里最好不要使用String类型,因为在{$H-}环境下有长度限制
I,E,C,M,Q:Integer;
begin
try
S:=TStringList.Create ;
S.Text:=Memo1.Text; showmessage(s.text);
E:=0;
C:=0;
M:=0;
Q:=0;
for I:=1 to Length(S.Text) do
case Ord(S.Text[I]) of
48..57: Inc(M); //数字字符个数求和
65..90,97..122: Inc(E); //英文字符个数求和
33..47,58..64,91..96,123..126: inc(Q); //其他字符个数求和
else
inc(C); //中文字符个数求和
end;
Edit1.Text:=IntToStr(E);
Edit2.Text:=IntToStr(C Div 2);
Edit3.Text:=IntToStr(M);
Edit4.Text:=IntToStr(Q);
finally
S.Free;
end;
end;程序代码精简后是这个样子,至于你说的统计标点符号的功能,只能按照我前面说的具体符号分类统计了,无非就是Case多几个分支!
begin
Close;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;procedure TForm1.Button2Click(Sender: TObject);
var
S:TStringList; //最好不要用String类型,因为在{$H-}环境下有长度限制
I,E,C,M,Q:Integer;
begin
S.Text:=Memo1.Text;
E:=0;
C:=0;
M:=0;
Q:=0;
for I:=1 to Length(S.Text) do
case Ord(S.Text[I]) of
48..57: Inc(M); //数字字符个数求和
65..90,97..122: Inc(E); //英文字符个数求和
33..47,58..64,91..96,123..126: Inc(Q); //其他字符个数求和
else
Inc(C); //中文字符个数求和
end;
Edit1.text:=IntToStr(E);
Edit2.text:=IntToStr(C div 2);
Edit3.text:=IntToStr(M);
Edit4.text:=IntToStr(Q);
end;procedure TForm1.Button4Click(Sender: TObject);
var
I:Integer;
begin
for I:=0 to Self.ControlCount-1 do
if Self.FindComponent('Edit'+IntToStr(I)) is TEdit then
(Self.FindComponent('Edit'+IntToStr(I) as TEdit).Clear;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;
代码就只能这样简化!至于你所说的无法统计标点符号的问题,我想和我前面说过的一样,只能具体符号具体对待,在Case中进行细化了!
var
I:Integer;
begin
for I:=0 to Self.ControlCount-1 do
if Self.FindComponent('Edit'+IntToStr(I)) is TEdit then
(Self.FindComponent('Edit'+IntToStr(I) as TEdit).Clear;
end;请问这样改应该怎样理解呢???
Self.ControlCount-1
Self.FindComponent