求救:如何提高查找速度?

powpow 2001-12-10 04:55:36
一段长度很长的字符串“slfkjsadfjsjdflkaflkbcxmn”,从中查询出需要的字符串"jsjd"(这个字符串任意的),我现在用的是逐字匹配的方法。代码如下:
dim object as string '要查询的字符串
For t = Len(Trim(Object)) To 1 Step -1
For r = 1 To Len(Trim(Object)) - t + 1
mid(.....)
......
next r
next t
就是挨个匹配查找,但是字符串很长的时候这种方法太慢了。大家有没有什么好的算法,可以提高速度. 给点儿建议也行!
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Random 2001-12-11
  • 打赏
  • 举报
回复

strSQL="SELECT * FROM <table> WHERE '" & A & "' LIKE '%'+<Field> +'%'"
powpow 2001-12-11
  • 打赏
  • 举报
回复
help!
powpow 2001-12-11
  • 打赏
  • 举报
回复
谢了,我试试
lcooky 2001-12-11
  • 打赏
  • 举报
回复
对,楼上的反向匹配非常有用。我经常用。
powpow 2001-12-10
  • 打赏
  • 举报
回复
我想把问题说得简单点儿,结果反而弄巧成拙!题意表达错误了!
其实是给一个字符串A,一个数据表中的filed中的记录,可能是A的子集,从表中查询出所有包含A子集的记录。就是这样!
我用的是把A用来逐字匹配,改变recordsource属性,select出记录!这样的话,有什么快点儿的方法。数据表记录超过万条! (field)
例如:A="sdfknbv,ersdj" sdf
knb
jfj
则选出sdf,knb!

KMP算法是什么?我查察看!

phoenixlin 2001-12-10
  • 打赏
  • 举报
回复
从两端一起向中间找,这样可减少循环次数
fraser01 2001-12-10
  • 打赏
  • 举报
回复
前面的贴子贴错了。我想的太复杂了
只要Instr(start,string1,string2)就行了,他可以返回字符串是否有匹配,
如果有,则返回开始的位置。
uguess 2001-12-10
  • 打赏
  • 举报
回复

VB不是有查找字符串的函数么?Instr().
fraser01 2001-12-10
  • 打赏
  • 举报
回复
采用二分法,先将子段拆分成两部分,其中有3个字节重复
用INSTR判断是否有
如果有则再拆分,没有则跳到下一个子段部分。

asp_boy 2001-12-10
  • 打赏
  • 举报
回复
KMP算法。
找本数据结构与算法的书看看。
wander1997 2001-12-10
  • 打赏
  • 举报
回复
一次不要找一个
要找四格

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧