算法问题请教 望给出代码(100)

  • 主题发起人 主题发起人 2843223
  • 开始时间 开始时间
2

2843223

Unregistered / Unconfirmed
GUEST, unregistred user!
把 下列表 放到 tstringlist 中 。。怎么实现查找?? 1,测试1 2,测试1 1,测试2 2,测试2我想查出 1中是否存在 测试2 怎么查询。。。谢谢
 
vari:integer;beginfor i:=0 to strlist.count-1 dobegin if (copy(strlist.strings,1,pos(',',strlist.strings,)-1)=1) and (pos('测试2',strlist.strings,)<>0) then begin showmessage('存在'); end else begin showmessage('不存在'); end;end;end;///是不是想实现这样的效果?
 
不是这样的。pInfo=^TIndustryInfoTIndustryInfo = record sTelPhone : string; sIndusName : string; end;var a:=pInfo;a.sTelPhone:=1;a.sIndusName:=测试2;把a 放到 tstringlist 中。。。然后查找。。。。 请给出代码。。
 
unit uQueue;interfaceuses SysUtils, Classes,IniFiles;type PrecInfo = ^TIndustryInfo; TIndustryInfo = record sTelPhone : string; sIndusName : string; end; TQueue = class(THashedStringList) //THashedStringList private public procedure AddIndustryInfo(AtelPhone,AIndust: string); {得到对应的成交股票} Function GetIndustryInfo(Const ATelPhone:string):TIndustryInfo; function TypeIsExists(Const ATelPhone:string;AIndusType:string):Boolean; end;implementationFunction TQueue.TypeIsExists(const ATelPhone: string):boolean;var tmpIn:TIndustryInfo;begin Result:=False; tmpIn:=GetIndustryinfo(ATelPhone); if tmpIn.sTelPhone<>'' then Result :=True; end;Function TQueue.GetIndustryinfo(Const ATelPhone:string):TIndustryInfo;var Index :integer; tmp :PrecInfo;begin try //new(tmp); Index:=IndexOf(ATelPhone); if Index<>-1 then begin tmp :=PrecInfo(Pointer(Objects[Index])); end; finally if tmp=nil then begin result.sTelPhone :=''; Result.sIndusName :=''; end else result:=tmp^; end;end;procedure TQueue.AddIndustryInfo(AtelPhone,AIndust: string);var p : PrecInfo; Index : integer;begin New(p); p^.sTelPhone := AtelPhone; p^.sIndusName := AIndust; Index:=IndexOf(p^.sTelPhone); if Index=-1 then begin AddObject(p^.sTelPhone,TObject(p)); end;end;end.
 
你先贴下放进去的代码主要是我理解错了,并且现在还没理解你具体想要的
 
if Index<>-1 then 应该去掉
 
就是说 把下列表放到了 tstringlist 中 1 测试1 2 测试1 1 测试2 2 测试2然后可以 在tstringlist 中 查找 是否存在 1、测试2 这条记录。。。
 
slist.Find('1、测试2',index)//试试这个可以不还有 TStringList.Get(Index: Integer): string;你看看 delphi里面的TStringList 所在单元的几个函数,应该能实现你要的你的问题 在tstringlist 中 查找 是否存在 1、测试2 这条记录。。。只对问题来说 不就是循环 找到 1、测试2 这条记录么
 
这个 请注意 sTelPhone:=1 sIndusName:=测试2分别在两个 记录中。。
 
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uQueue;type TForm1 = class(TForm) btn1: TButton; btn2: TButton; cbb1: TComboBox; cbb2: TComboBox; mmo1: TMemo; btn3: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btn1Click(Sender: TObject); procedure btn3Click(Sender: TObject); private { Private declarations } Queue: TQueue; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin Queue := TQueue.Create;end;procedure TForm1.FormDestroy(Sender: TObject);begin Queue.Free;end;procedure TForm1.btn1Click(Sender: TObject);begin Queue.AddIndustryInfo(cbb1.Text, cbb2.Text);end;procedure TForm1.btn3Click(Sender: TObject);var i: Integer;begin mmo1.Clear; for i := 0 to Queue.Count - 1 do begin mmo1.Lines.Add(PrecInfo(Queue.Objects).sTelPhone+';'+PrecInfo(Queue.Objects).sIndusName); end;end;end.//我是直接调用的你的单元 stringslist的内容显示在mmo1中,要是还不满意我也没办法啦//能全部显示出来了,查找就很简单了,你自己改下就OK了//又写了个放在你这个单元里面的函数,外面可以调这个直接查找,不过 你上面说的添加的时候 if Index<>-1 then 应该去掉 这个不能去掉,去掉后会查找出问题,具体你可以测试下 原因就是 find(AtelPhone, Index)里面的index定位为出错function TQueue.FindIndustryInfo(AtelPhone, AIndust: string): boolean;var Index: Integer;begin Result := False; if find(AtelPhone, Index) then begin if PrecInfo(objects[Index]).sIndusName = AIndust then Result := True; end;end;
 
后退
顶部