unit SearchWord;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;type
  TForm1 = class(TForm)
    Search: TEdit;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}
Function FindResult(hzchar:string):char;
begin
  case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
    $B0A1..$B0C4 : result := 'A';
    $B0C5..$B2C0 : result := 'B';
    $B2C1..$B4ED : result := 'C';
    $B4EE..$B6E9 : result := 'D';
    $B6EA..$B7A1 : result := 'E';
    $B7A2..$B8C0 : result := 'F';
    $B8C1..$B9FD : result := 'G';
    $B9FE..$BBF6 : result := 'H';
    $BBF7..$BFA5 : result := 'J';
    $BFA6..$C0AB : result := 'K';
    $C0AC..$C2E7 : result := 'L';
    $C2E8..$C4C2 : result := 'M';
    $C4C3..$C5B5 : result := 'N';
    $C5B6..$C5BD : result := 'O';
    $C5BE..$C6D9 : result := 'P';
    $C6DA..$C8BA : result := 'Q';
    $C8BB..$C8F5 : result := 'R';
    $C8F6..$CBF9 : result := 'S';
    $CBFA..$CDD9 : result := 'T';
    $CDDA..$CEF3 : result := 'W';
    $CEF4..$D188 : result := 'X';
    $D1B9..$D4D0 : result := 'Y';
    $D4D1..$D7F9 : result := 'Z';
  else
    result := char(0);
  end;
end;Function SearchResult(Source:TStrings;Des:String):String;label NotFind;
var
 i,j:Integer;
 TemStr:String;
begin
 For i:=0 to Source.Count-1 do
 begin
  For j:=1 to Length(Des) do
  begin
   TemStr:=Source[i][2*j-1]+Source[i][2*j];
   if (Des[j]<>'?')and (UpperCase(Des[j])<>FindResult(TemStr)) then
        goto NotFind;
  end;
  if Result='' then Result:=Source[i]
  else Result:=Result+char(13)+Source[i];
  NotFind:
 end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
 ListBox2.Clear;
 ListBox2.Items.Text:=SearchResult(ListBox1.Items,Search.Text);
end;end.比如你想查找关键字“中国人民银行”,你只需要输入“zgrmyh”来实现检索,可是上面的源代码出了点问题,我看不出来,高手们,帮帮菜鸟

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
      function getpyindexchar(hzchar:string):char;
      function getstringpy(sourcestr:string):string;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function TForm1.getpyindexchar(hzchar:string):char;
    begin
       case word(hzchar[1]) shl 8 +word(hzchar[2]) of
          $B0A1..$B0D0 : RESULT :='A';
          $B0D1..$B2C0 : RESULT :='B';
          $B2C1..$B4F2 : RESULT :='C';
          $B4F3..$B6E9 : RESULT :='D';
          $B6EA..$B7A1 : RESULT :='E';
          $B7A2..$B8C0 : RESULT :='F';
          $B8C1..$B9FD : RESULT :='G';
          $B9FE..$BBF6 : RESULT :='H';
          $BBF7..$BFA5 : RESULT :='J';
          $BFA6..$C0AB : RESULT :='K';
          $C0AC..$C2E7 : RESULT :='L';
          $C2E8..$C4C2 : RESULT :='M';
          $C4C3..$C5B5 : RESULT :='N';
          $C5B6..$C5BD : RESULT :='O';
          $C5BE..$C6D9 : RESULT :='P';
          $C6DA..$C8BA : RESULT :='Q';
          $C8BB..$C8F5 : RESULT :='R';
          $C8F6..$CBF9 : RESULT :='S';
          $CBFA..$CDD9 : RESULT :='T';
          $CDDA..$CEF3 : RESULT :='W';
          $CEF4..$D1B8 : RESULT :='X';
          $D1B9..$D4D0 : RESULT :='Y';
          $D4D1..$D7F9 : RESULT :='Z';
       else
          //result :=char(0);
          result :='V';
       end;
    end;function TForm1.getstringpy(sourcestr:string):string;
    var
       I_temp : integer;
       B_temp : bool;
    begin
       result:='';
       B_temp:=false;
       for i_temp:=1 to length(sourcestr) do
          begin
             if B_temp then
                B_temp:=false
             else
                begin
                if word(sourcestr[i_temp])<176 then
                   result:=result+sourcestr[i_temp]
                else
                   begin
                      result:=result+getpyindexchar(sourcestr[i_temp]+sourcestr[i_temp+1]);
                      b_temp:=true;
                   end;
                end;
          end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      label1.caption:= getstringpy('中国人民银行');
    end;end.//上面的这段程序我刚刚测试过,没问题,你只需要新建一个项目在 form1上放一个label和一个button.然后ctrl+a ,del所有的代码。  把这段贴就 ok了
      

  2.   

    你这个问题是因为“中国人民银行”的行是多音字,所以zgrmyh不行,zgrmyx就可以。