#include<stdio.h>
#include<string.h>
//unsigned short jump(char c);
int search(char*, char*);
int char_index(char,char*);
int main(void)
{
//char* pattern = "norn";
//char* pattern = "grow";
//char* pattern = "corn";
char* pattern = "door to door";
//char* target = "okas from acornorn grow";
char* target = "he went door to door";
printf("%s\n",search(pattern,target)?"find":"not find");
return 0;
}
int char_index(char c, char* pattern)
{
char* tmp = pattern;
while(*tmp){
if(*tmp == c){
return tmp-pattern+1;
}
tmp++;
}
return 0;
}
/**
* Boyer-Moore fast string searching algorithm
*/
int search(char* pattern, char* target)
{
int len = strlen(pattern);
//int jump = 0;
// 如果cur指向的字符不等于pattern的最后一个字符,则cur右移pattern的长度个字符
while(*cur){ // 如果cur指向的字符等于pattern的最后一个字符,那么依次比较cur-1和pattern的倒数第二个字符,
// 如果仍然相同,依次类推,如果pattern中的字符全部被匹配,那么匹配成功
if(*cur != pattern[len-1]){ // 如果迭代过程中出现字符不匹配的情况,那cur指针么依据被查找串中不匹配的字符在pattern中的位置移动
cur += (len-char_index(*cur, pattern)); // 如果被查找串中不匹配的字符不在pattern中,那么cur移动pattern的长度个位置
}else{ // 如果被查找串中不匹配的字符在pattern中,那么cur先指向该字符,然后移动的距离 = 该字符在pattern中的位置到pattern末尾的距离
int i = 1;
printf("\n%c",*cur);
while(1){
//字符在pattern中的位置到pattern末尾的距离 == 被查找串移动的距离
if(*(cur-i) == pattern[len-1-i]){
printf("%c",*(cur-i));
if(i++ == len-1){
printf("\n");
printf("from position %d\n", cur-target-(len-1));
return 1;
}
}else{
cur -= i;
break;
}
}
}
}
return 0;
}
分享到:
相关推荐
Boyer-Moore算法是一种高效的字符串搜索算法,由Robert S. Boyer和J Strother Moore在1977年提出。它通过充分利用模式串(要查找的字符串)的信息,减少了不必要的字符比较次数,从而提高了搜索效率。在C语言中实现...
在对经典的Boyer-Moore和Quick Search串匹配算法进行分析的基础上,提出了一种更加快速的串匹配算法Quick Boyer-Moore(QBM)。QBM算法利用当前尝试中的已匹配子串、匹配失败字符信息以及与当前窗口下一个字符的位置...
Boyer-Moore法实现字符串匹配(java) 在字符串匹配问题中,Boyer-Moore算法是一种高效的解决方案。该算法使用坏字符移动表和好后缀移动表来实现字符串匹配。下面将详细解释Boyer-Moore算法的实现原理和java代码...
Boyer-Moore算法是一种高效的字符串搜索算法,由Robert W. Moore和John E. Boyer在1970年代提出。这个算法的核心思想是利用模式串(待查找的字符串)和文本串(被搜索的字符串)的信息来减少不必要的比较,从而提高...
Boyer-Moore算法是一种高效的字符串搜索算法,由Robert S. Boyer和J Strother Moore在1970年代提出。它通过充分利用了模式(要查找的子串)和文本(主串)的信息,减少了不必要的字符比较,提高了搜索效率。在C#中...
Boyer-Moore-Horspool-Sunday算法是字符串匹配领域中的一个高效算法,它结合了Boyer-Moore算法、Horspool算法以及Sunday算法的优点,以提高在文本中查找特定模式(子串)的速度。这个算法的主要目标是减少不必要的...
Boyer-Moore算法是其中一种高效的方法,但本话题将探讨比Boyer-Moore更快的字符串查找算法。这些优化算法在保持准确性的同时,通过减少比较次数来提高效率。 Boyer-Moore算法由Robert S. Boyer和J. Strothmann于...
Boyer-Moore字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小...
Boyer-Moore算法是一种高效的字符串匹配算法,由Robert S.Boyer和J Strother Moore于1977年提出。相比于KMP算法,Boyer-Moore算法在实际应用中更为常见,特别是在文本编辑器的“查找”功能中。它的主要优势在于通过...
Boyer-Moore字符串搜索算法.ppt
**博耶-摩尔(Boyer-Moore)算法** 博耶-摩尔算法是一种高效字符串搜索算法,由Robert S. Boyer和J Strother Moore于1977年提出。该算法以其独特的预处理和坏字符规则,显著提高了在大数据集中的搜索效率,尤其是在...
Boyer-Moore算法是一种高效的字符串搜索算法,尤其在处理大量文本时表现出色。这个压缩包文件包含了使用C++语言实现的Boyer-Moore算法的源代码,以及一个可能包含算法解释或使用说明的README.txt文件。接下来,我们...
Boyer-moore-string-search 在C中的实现。 该算法从右到左向后执行匹配,并通过迭代匹配,模式移位,匹配,移位等进行操作。移位量是通过应用以下两个规则来计算的: 不良品格规则良好的后缀规则实际的偏移量是其中...
usage:四种字符串匹配算法的实现(Sunday、KMP、Boyer-Moore、horspool)的测试 各文件说明: search_string.h 头文件,包含了对各个函数的声明; search_string.c 包含了头文件中所有函数的具体实现; search_...
### Boyer–Moore–Horspool 算法详解 #### 一、算法概述 Boyer–Moore–Horspool 算法是一种高效的字符串搜索算法,它由 Robert S. Boyer 和 J Strother Moore 在 1977 年提出,并在后续的研究中得到了进一步的...
在分析《论文研究-BWT-Boyer-Moore压缩域搜索算法的研究.pdf》中提供的信息时,我们可以提取出以下IT知识要点: 1. **压缩域搜索算法**: 研究的焦点在于压缩域搜索算法,这是一种旨在对压缩过的文件数据进行有效...
### 一种串匹配的快速Boyer-Moore算法 #### 概述 串匹配是计算机科学中的一个核心问题,广泛应用于文档编辑、内容管理、计算机病毒检测、DNA序列比对等多个领域。Boyer-Moore (BM) 算法因其高效性而成为串匹配中最...
%% Boyer-Moore 多数投票算法% Boyer-Moore Vote Algorithm 解决了多数票问题% 线性时间 O(n) 和对数空间 O(\log n)。 多数票% 问题是确定在任何给定的选择序列中% 有一个选择出现次数比所有其他选择都多,如果是...