谁有快速的在String中查找SubString的函数(至少支持and)(200分)

  • 主题发起人 主题发起人 com
  • 开始时间 开始时间
C

com

Unregistered / Unconfirmed
GUEST, unregistred user!
SubString中用空格表示"and",(如果是汇编写的那最好了,String通常有
30KB左右,SubString通常只有1,2个单词)
不要来灌纯净水,我知道用几个POS就可以,我只是想要个更快的.
不知道俄国人那个QStrings里有没有这样的函数?
 
"and" ?怎么个 "and" 法?
不懂,我的理解是 "or"

要快,用 FastPos,用汇编写的,但是没有 "or"
不过自己实现也不难(因为我都搞过:-p
 
to com:
关键是算法,汇编不汇编无所谓,Delphi和字符串处理很强大了,无需借助汇编。
我想你要的可能是子串的模式匹配算法吧。
and是什么意思?
你能不能把你的意思再说和明白些
 
有兴趣。
 
and 是不是要查几个单词?
 
and 就是String里要包含substring里所有的单词啦,至于or就同理可证了 :)
另外SubString不应该有前后顺序,比如 a b c 查询时应该等价于 c a b 、b c a 等等,
他应该是不区分大小写的。(如果还支持"or"就更好了)
不知道那位老凶对QStrings比较了解,这俄国人写的那些函数是真TMD的快!!!

beta 老凶既然做过能否给出段代码?
简单的实现当然好办,我现在是希望有一个快快快快快快快快快速的!:)
 
我的意思好像没说明白,其实就是判断两个字符串是否相等,比如:
'a b c' 应该= 'abc◎#%!'
'b a c' 应该= 'Abc!ZSsdf98'
'b a' 应该= 'abcAS#adiu'
'c b' 应该= 'AbCAoa3jk'
'ab c' 应该= '#$^ab!@#%c@#@^'
............以此类推

具体点说就象CHM文件的检索一样
 
总算理解 and 的含义了 :-)
不过我做的是 or 的啊 :-(

不过看来也不难啊,以最后一行://'ab c' 应该= '#$^ab!@#%c@#@^' 为例

首先,你这个是不分大小写的,因此应该把SubString和String均lowercase

其次,把SubString按照空格切分到一个TStringList(如果少,可以用数组,
不过大小固定了不太好),把'ab c'中的'ab'当成一个元素,于是现在只有
两个元素然后,然后依次查找,只要有一个没有找到则算没有找到。

//切分部分
Procedure SplitTextIntoWords(Const S: String
var words: TStringlist);
Var
startpos, endpos: Integer;
Begin
words := TStringList.Create;
startpos := 1;
While startpos <= Length(S) Do Begin
// skip non-letters
While (startpos <= Length(S)) and (S[startpos] = ' ') Do
Inc(startpos);
If startpos <= Length(S) Then Begin
// find next non-letter
endpos := startpos + 1;
While (endpos <= Length(S)) and (S[endpos] <> ' ') Do
Inc(endpos);
words.add( Copy( S, startpos, endpos-startpos));
startpos := endpos+1;
End
{ If }
End
{ While }
End;

//查找部分
...
SplitTextIntoWords(lowercase(subString), subList);
aString := lowercase(aString);
found := true;
for i := 0 to subList.count - 1 do
begin
found := found and (pos(subList.Strings, aString));
end;
if found then
showmessage('找到啦!')
else
showmessage('真遗憾!');
 
我是想知道谁有更好的算法而不是几个Pos :(
 
我把俄国老毛子的Qstring抽了几个出来用,真是很快。
我敢说htw没有用过。Qstring与DELPHI自带的速度之差何止以道里计!
在一个800多K的文本文件里,用普通的替换函数替换约1500个词,要好几分钟。而用
Qstring函数则秒秒钟(我的机器MMX166,64M)。
所以,com,就用Qstring来搞,有多少and不可以重来?呵呵,反正这么快。
 
还好终于有人认识到QStrings的速度了,
但还是想要更快更智能更优化的代码!
 
不知有没有人用过FastStrings.pas
也挺快的,不过没跟QStrings比较过。
 
FastString运行极快,但在查找替换时,倘子字符串只有一个char,则会出错。所以我后来
只有放弃它。后来我在smth的bbs里发现DREAMTIGER也注意到了这个问题,并且对它进行了
修正。故而我又重新将它捡起。
[推荐使用。]
 
Qstring好像就没有Topside所说的问题,我用它POS或者Replace #13都没问题。
 
到 深度历险下载RegExpr,可以实现与Perl一样很强的字符串处理功能
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
473
import
I
后退
顶部