`

Boyer-Moore

阅读更多
#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算法C实现

    Boyer-Moore算法是一种高效的字符串搜索算法,由Robert S. Boyer和J Strother Moore在1977年提出。它通过充分利用模式串(要查找的字符串)的信息,减少了不必要的字符比较次数,从而提高了搜索效率。在C语言中实现...

    论文研究-一种串匹配的快速Boyer-Moore算法.pdf

    在对经典的Boyer-Moore和Quick Search串匹配算法进行分析的基础上,提出了一种更加快速的串匹配算法Quick Boyer-Moore(QBM)。QBM算法利用当前尝试中的已匹配子串、匹配失败字符信息以及与当前窗口下一个字符的位置...

    Boyer-Moore法实现字符串匹配(java)

    Boyer-Moore法实现字符串匹配(java) 在字符串匹配问题中,Boyer-Moore算法是一种高效的解决方案。该算法使用坏字符移动表和好后缀移动表来实现字符串匹配。下面将详细解释Boyer-Moore算法的实现原理和java代码...

    简单的Boyer-Moore算法的实现C#附源码

    Boyer-Moore算法是一种高效的字符串搜索算法,由Robert W. Moore和John E. Boyer在1970年代提出。这个算法的核心思想是利用模式串(待查找的字符串)和文本串(被搜索的字符串)的信息来减少不必要的比较,从而提高...

    boyer-moore算法的c#实现

    Boyer-Moore算法是一种高效的字符串搜索算法,由Robert S. Boyer和J Strother Moore在1970年代提出。它通过充分利用了模式(要查找的子串)和文本(主串)的信息,减少了不必要的字符比较,提高了搜索效率。在C#中...

    Boyer-Moore-Horspool-Sunday.rar_Boyer Moore_horspo_horspool_sund

    Boyer-Moore-Horspool-Sunday算法是字符串匹配领域中的一个高效算法,它结合了Boyer-Moore算法、Horspool算法以及Sunday算法的优点,以提高在文本中查找特定模式(子串)的速度。这个算法的主要目标是减少不必要的...

    比Boyer-Moore更快的字符串查找算法.rar_Boyer Moore_字符串查找_查找算法

    Boyer-Moore算法是其中一种高效的方法,但本话题将探讨比Boyer-Moore更快的字符串查找算法。这些优化算法在保持准确性的同时,通过减少比较次数来提高效率。 Boyer-Moore算法由Robert S. Boyer和J. Strothmann于...

    Boyer-Moore算法

    Boyer-Moore字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小...

    字符串匹配的Boyer-Moore算法 - 阮一峰的网络日志1

    Boyer-Moore算法是一种高效的字符串匹配算法,由Robert S.Boyer和J Strother Moore于1977年提出。相比于KMP算法,Boyer-Moore算法在实际应用中更为常见,特别是在文本编辑器的“查找”功能中。它的主要优势在于通过...

    Boyer-Moore字符串搜索算法.ppt

    Boyer-Moore字符串搜索算法.ppt

    newBM.rar_Boyer Moore_Boyer-Moore算法_boyer

    **博耶-摩尔(Boyer-Moore)算法** 博耶-摩尔算法是一种高效字符串搜索算法,由Robert S. Boyer和J Strother Moore于1977年提出。该算法以其独特的预处理和坏字符规则,显著提高了在大数据集中的搜索效率,尤其是在...

    cpp代码-boyer-Moore算法实现

    Boyer-Moore算法是一种高效的字符串搜索算法,尤其在处理大量文本时表现出色。这个压缩包文件包含了使用C++语言实现的Boyer-Moore算法的源代码,以及一个可能包含算法解释或使用说明的README.txt文件。接下来,我们...

    boyer-moore-string-search:C语言中的Boyer Moore字符串搜索实现

    Boyer-moore-string-search 在C中的实现。 该算法从右到左向后执行匹配,并通过迭代匹配,模式移位,匹配,移位等进行操作。移位量是通过应用以下两个规则来计算的: 不良品格规则良好的后缀规则实际的偏移量是其中...

    string_match:实现并对比了各类字符串匹配算法,包括Sunday、KMP、Boyer-Moore、horspool

    usage:四种字符串匹配算法的实现(Sunday、KMP、Boyer-Moore、horspool)的测试 各文件说明: search_string.h 头文件,包含了对各个函数的声明; search_string.c 包含了头文件中所有函数的具体实现; search_...

    Boyer–Moore–Horspool algorithm

    ### Boyer–Moore–Horspool 算法详解 #### 一、算法概述 Boyer–Moore–Horspool 算法是一种高效的字符串搜索算法,它由 Robert S. Boyer 和 J Strother Moore 在 1977 年提出,并在后续的研究中得到了进一步的...

    论文研究-BWTBoyerMoore压缩域搜索算法的研究.pdf

    在分析《论文研究-BWT-Boyer-Moore压缩域搜索算法的研究.pdf》中提供的信息时,我们可以提取出以下IT知识要点: 1. **压缩域搜索算法**: 研究的焦点在于压缩域搜索算法,这是一种旨在对压缩过的文件数据进行有效...

    一种串匹配的快速Boyer_Moore算法.pdf

    ### 一种串匹配的快速Boyer-Moore算法 #### 概述 串匹配是计算机科学中的一个核心问题,广泛应用于文档编辑、内容管理、计算机病毒检测、DNA序列比对等多个领域。Boyer-Moore (BM) 算法因其高效性而成为串匹配中最...

    Boyer-Moore 多数表决算法:Boyer-Moore 多数表决算法-matlab开发

    %% Boyer-Moore 多数投票算法% Boyer-Moore Vote Algorithm 解决了多数票问题% 线性时间 O(n) 和对数空间 O(\log n)。 多数票% 问题是确定在任何给定的选择序列中% 有一个选择出现次数比所有其他选择都多,如果是...

Global site tag (gtag.js) - Google Analytics