Sunday 算法的 O-C语言实现
来源:互联网 发布:java重载规则 编辑:程序博客网 时间:2024/06/05 15:59
转自:http://blog.csdn.net/kmyhy/article/details/12276491
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 算法的 O-C语言实现
- Sunday 算法的 O-C语言实现
- 字符串匹配--Sunday算法-C语言实现
- sunday算法的实现
- Sunday算法c语言版实现
- sunday算法的简单实现
- 字符串查找算法Sunday的实现
- SUNDAY 算法 c#实现
- sunday算法实现
- Sunday算法java实现
- Java实现Sunday算法
- 关于Sunday算法以及实现
- 字符串匹配Sunday算法实现
- 字符串匹配Sunday算法实现
- sunday 字符串匹配算法的实现(支持二进制匹配)
- Sunday算法的一种Java实现(Leetcode28. Implement strStr())
- To_review_100_3---Sunday算法的整理
- ComputerGame---Sunday算法的应用
- PHP、JSP间的比较
- hbase安装配置
- 字符对齐
- uva 11248 网络流 【扩一条边的容量至某一指定值】
- 解决kindeditor上传图片、文件的错误
- Sunday 算法的 O-C语言实现
- 存储过程与函数的区别
- hadoop 用户权限设置
- SQL-ORDER BY 多字段排序
- RMAN—非归档模式—完全恢复
- linux下如何挂载U盘,虚拟机下如何挂载U盘,Ubuntu下如何挂载U盘
- Sphinx 2.2.3 安装和配置,英文数字中文搜索
- 食物链(并查集的简单应用)
- java中日期类型