不能统计中文的逗号,句号等符号,请问怎样修改呢??
还有程序是不是还能在简洁点??
请各位指教!!
谢谢!
以下是主要程序段
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.

解决方案 »

  1.   

    unit Unit1;interfaceuses
      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多几个分支!
      

  2.   

    unit Unit1;interfaceuses
      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多几个分支!
      

  3.   

    procedure TForm1.Button3Click(Sender: TObject);
    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中进行细化了!
      

  4.   

    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;请问这样改应该怎样理解呢???
      

  5.   

    就是用一句话清空窗口内所有的edit框
      

  6.   

    请问这二句是什么意思呢??
    Self.ControlCount-1
    Self.FindComponent