如何确定关键字在字符串中的位置?(字符串中可重复出现某关键字符,POS只得到第一个)求算法。(150分)

  • 主题发起人 主题发起人 netfun2000
  • 开始时间 开始时间
N

netfun2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个字符串变量S,存储格式为:
S:='ABabcdef0987654321asdf,B085bcd'(类似的数据)
另外还有一些关键字,存储在KeyList(TStringList)里面,存储类似:a 0 b e。
求算法实现:
得到关键字出现在字符串中的位置,并将位置和该关键字存储在另外的一个TStringList里面,且按照升序排序。
 
循环做pos不就可以了吗
 
没循环出来。
用了while,^_^。
 
procedure TOperateWordsForm.MarkFontColor(KeyWord: string
Color: TColor);
var
StartPos : Integer;
ToEnd : Integer;
FindAt : Integer;
FindNum : Integer;
tmpPos : integer;
begin
FindNum:=0;
if trim(KeyWord)='' then Exit;
tmpPos:=WordsControl.SelStart;
StartPos := 0;
ToEnd := Length(WordsControl.Text);
repeat
FindAt := WordsControl.FindText(KeyWord, StartPos, ToEnd, []);
if FindAt<>-1 then
begin
StartPos := FindAt+Length(KeyWord);
ToEnd := Length(WordsControl.Text)-StartPos;
WordsControl.SelStart := FindAt;
WordsControl.SelLength := Length(KeyWord);
WordsControl.SelAttributes.Color := Color;
PostMessage(WordsControl.Handle, EM_SCROLLCARET, 0, 0);
FindNum:=FindNum+1;
end;
until FindAt =-1;
WordsControl.SelStart:=tmpPos;
Label1.Caption:='共找到'+inttostr(FindNum)+'处地方';
end;
 
楼上的老兄(地质灾害)说的方法可行。
for i:=0 to KeyList.Count-1 do
begin
Key:=KeyList.Strings;
iPos:=Pos(Key,S);
while iPos<>0 do
begin
Memo1.Lines.Add(IntToStr(iPos)+';'+Key+#13#10);
iPos:=PosEx(Key,S,iPos+1);
end;
end;
还有更好的实现方法吗?
另外,我存储后,怎样实现排序?
 
有点奇怪,我将结果存储到TStringList里面,然后执行Sort,的不到正确的结果。
19.a
25.0
28.b
3.a
4.b
7.e
9.0

我想按照"."前的数字按照从小到大排序。
 
补齐后得到正确结果。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部