已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
From GossipcaterpillarAlgorithm Gossip: 字串核對說明今日的一些高階程式語言對於字串的處理支援越來越強大(例如Java、Perl等),不過字串搜尋本身仍是個值得探討的課題,在這邊以Boyer- Moore法來說明如何進行字串說明,這個方法快且原理簡潔易懂。解法字串搜尋本身不難,使用暴力法也可以求解,但如何快速搜尋字串就不簡單了,傳統的字串搜尋是從關鍵字與字串的開頭開始比對,例如 Knuth-Morris-Pratt 演算法 字串搜尋,這個方法也不錯,不過要花時間在公式計算上;Boyer-Moore字串核對改由關鍵字的後面開始核對字串,並製作前進表,如果比對不符合則依前進表中的值前進至下一個核對處,假設是p好了,然後比對字串中p-n+1至p的值是否與關鍵字相同。 那麼前進表該如何前進,舉個實際的例子,如果要在字串中搜尋JUST這個字串,則可能遇到的幾個情況如下所示:依照這個例子,可以決定出我們的前進值表如下: 其它JUST43214(match?)如果關鍵字中有重複出現的字元,則前進值就會有兩個以上的值,此時則取前進值較小的值,如此就不會跳過可能的位置,例如texture這個關鍵字,t的前進值應該取後面的3而不是取前面的7。實作 C #include #include #include void table(char*); / 建立前進表 int search(int, char*, char*); / 搜尋關鍵字 void substring(char*, char*, int, int); / 取出子字串 int skip256; int main(void) char str_input80; char str_key80; char tmp80 = 0; int m, n, p; printf(請輸入字串:); gets(str_input); printf(請輸入搜尋關鍵字:); gets(str_key); m = strlen(str_input); / 計算字串長度 n = strlen(str_key); table(str_key); p = search(n-1, str_input, str_key); while(p != -1) substring(str_input, tmp, p, m); printf(%sn, tmp); p = search(p+n+1, str_input, str_key); printf(n); return 0; void table(char *key) int k, n; n = strlen(key); for(k = 0; k = 255; k+) skipk = n; for(k = 0; k n - 1; k+) skipkeyk = n - k - 1; int search(int p, char* input, char* key) int i, m, n; char tmp80 = 0; m = strlen(input); n = strlen(key); while(p m) substring(input, tmp, p-n+1, p); if(!strcmp(tmp, key) / 比較兩字串是否相同 return p-n+1; p += skipinputp; return -1; void substring(char *text, char* tmp, int s, int e) int i, j; for(i = s, j = 0; i = e; i+, j+) tmpj = texti; tmpj = 0; Java import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class StringMatch private int skip; private int p; private String str; private String key; public StringMatch(String key) skip = new int256; this.key = key; for(int k = 0; k = 255; k+) skipk = key.length(); for(int k = 0; k key.length() - 1; k+) skipkey.charAt(k) = key.length() - k - 1; public void search(String str) this.str = str; p = search(key.length()-1, str, key); private int search(int p, String input, String key) while(p input.length() String tmp = input.substring( p-key.length()+1, p+1); if(tmp.equals(key) / 比較兩字串是否相同 return p-key.length()+1; p += skipinput.charAt(p); return -1; public boolean hasNext() return (p != -1); public String next() String tmp = str.substring(p); p = search(p+key.length()+1, str, key); return tmp; public static void main(String args) throws IOException BufferedReader bufReader = new BufferedReader( new InputStreamReader(System.in); System.out.print(請輸入字串:); String str = bufReader.readLine(); System.out.print(請輸入搜尋關鍵字:); String key = bufReader.r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司带动就业协议书
- 广州市白鹤洞街2025年下半年招考党政办文秘易考易错模拟试题(共500题)试卷后附参考答案
- 广州南沙开发区规划研究中心招考专业技术人员易考易错模拟试题(共500题)试卷后附参考答案
- 公司承诺提成协议书
- 广东广州规划和自然资源局增城区分局下属事业单位区不动产登记中心招聘易考易错模拟试题(共500题)试卷后附参考答案
- 杭州市装潢合同范本
- 山东政法学院(济南)2025年下半年教师招聘招聘易考易错模拟试题(共500题)试卷后附参考答案
- 校园绿化维护协议书
- 宁津人才发展集团限公司招聘工作人员拟聘用人员易考易错模拟试题(共500题)试卷后附参考答案
- 宁夏烟草专卖局(公司)招聘应届高校毕业生10人易考易错模拟试题(共500题)试卷后附参考答案
- AC-20C沥青混合料生产配合比以及配合比的验证报告
- (正式版)HGT 6285-2024 甲基丙烯醛氧化制甲基丙烯酸催化剂活性试验方法
- 临床医学导论习题与答案2
- 第九章 - 软开关技术
- 海南警察学院规划方案
- 新冀教版冀人版科学四年级上册 教案(全册教学设计)
- 2024年航空货运行业培训资料
- 药理学:抗菌药氨基糖苷类抗生素课件
- 免养生水稳基层施工技术规程
- 税法(第二版)课件全套 高萍 第1-13章 税收、税法的概念及分类-印花税和烟叶税
- 3到5分钟的朗诵稿
评论
0/150
提交评论