sunday 算法是一种在字符串搜索子串的算法,据说比 Boyer Moore 算法更快,规则更简单。关于sunday 算法这里就不多说了,你可以参考下面这个链接:
http://www.cnblogs.com/lbsong/archive/2012/05/25/2518188.html
但网上却找不到它的 O-C 语言实现。
我根据它的 C# 实现修改了一个 O-C 的版本,你可以参考:
+(int)indexOfString:(NSString*)textpattern:(NSString*)pattern start:(int)startPosition count:(int)count{
if (startPosition < 0) startPosition =0;
if (startPosition >= text.length) return -1;
int endPosition = startPosition + count;
if (endPosition < 0) return -1;
if (endPosition > text.length)endPosition = text.length;
if (pattern.length > endPosition -startPosition) return-1;
int i = startPosition;
int j = 0;
int m = i + pattern.length;
int matchPosition = i;
while (i < text.length && j <pattern.length)
{
if ([textcharacterAtIndex:i] == [pattern characterAtIndex:j]){// i、j 相等,比较后续字符
i++;
j++;
}else{// i、j 不等,比较 m
if (m == endPosition){// m 已经到达末尾,终止循环
i = text.length + 1;
break;
}
int k = pattern.length - 1;// 在模板字串中从后向前查找 m 的匹配并计入 k
while (k >= 0 && [textcharacterAtIndex:m] != [pattern characterAtIndex:k]){
k--;
}
int gap = pattern.length - k;// 计算移动的步长
i += gap;// 模板字串移动到下一步长
m = i + pattern.length;//m 移动到模板字串下一字符
if (m > endPosition) m = endPosition;// 如果 m 大于最后一个字符位置,则 m 移至最后一字符
matchPosition = i;
j = 0;
}
}
if (matchPosition<text.length&& i <= text.length){
return matchPosition;
}
return -1;
}
+(int)indexOfString:(NSString*)text pattern:(NSString*)pattern{
return [self indexOfString:text pattern:patternstart:0 count:text.length];
}
分享到:
相关推荐
自己所写的sunday算法的实现,初学者所写请见谅!
字符串匹配算法之Sunday算法C++实现
模式匹配之Sunday算法,Sunday算法的说明见文章: http://blog.csdn.net/sun2043430/article/details/8820123
字符串匹配算法 Sunday算法 一种线性字符串模式匹配算法 C语言实现。
字符串模式匹配算法 sunday算法实现。说到字符串匹配算法,立马就想到了KMP算法,谁让KMP这么经典呢,各种算法教材里必然有KMP啊。但是KMP算法太复杂了,比KMP更简单更高效的算法就是Sunday算法。
SUNDAY 算法 (初步想用它来做字符匹配度的标准) 参考:http://hi.baidu.com/blackcode/blog/item/583d1c38bb3621f3b211c7bd.html
字符串的模式匹配应用十分广泛,在信息的搜索查询等方面具有重要作用,研究串...最后得出结论:在实际应用中,坏字符大量存在的情况下,改进算法的最优时间复杂度可达O(n/m),在同一时间复杂度下,比Sunday算法效率提高25~50%.
BM算法和sunday算法相关的原始论文
Sunday算法特征码搜索极速定位基址和call地址C++(支持通配符),绝对可以用的特征码搜索基址,call的地址。上传备用。
boyermoore算法实现 Sunday算法实现
sunday算法,原始文章
字符串匹配之Sunday算法(英文原版)
Sunday算法是目前单字符串匹配算法中最快的一种。类似的还有BM
Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行...
Sunday算法思想跟BM算法很相似,在匹配失败时关注的是文本串中参加匹配的最末位字符的下一位字符,下面是用C#实现sunday的实例代码,有需要的朋友可以参考一下
Sunday算法的思想和BM算法中的坏字符思想非常类似。差别只是在于Sunday算法在匹配失败之后,是取目标串中当前和Pattern字符串对应的部分后面一个位置的字符来做坏字符匹配,写了个小例子来实现以下这个算法
自己整理的用C语言写的数据结构和排序查找算法。数据结构包括:栈,队列,两个队列实现一个栈,两个栈实现一个队列,二叉树的创建,添加,平衡二叉树天界旋转等,红黑树,创建,添加节点,删除节点,调整。算法包括...
基于Sunday算法改进的字符串匹配算法,张超超,芦天亮,字符串模式匹配算法在入侵检测系统、协议识别技术中起着至关重要的作用。文章在分析几种经典的模式匹配算法的基础上,提出了一种
用C++实现字符串模式匹配算法中的sunday算法
usage:四种字符串匹配算法的实现(Sunday、KMP、Boyer-Moore、horspool)的测试 各文件说明: search_string.h 头文件,包含了对各个函数的声明; search_string.c 包含了头文件中所有函数的具体实现; search_...