一步一步写算法(之字符串查找 上篇)
2014-12-11 09:53
204 查看
原文:
一步一步写算法(之字符串查找 上篇)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解、字符串的比较、字符串的拷贝、字符串的upper等等。另外一个经常使用但是却被我们忽视的功能就是字符串的查找。word里面有字符串查找、notepad里面有字符串查找、winxp里面也有系统自带的字符串的查找,所以编写属于自己的字符串查找一方面可以提高自己的自信心,另外一方面在某些情况下可以提高软件的运行效率。下面我们就三个方面讨论一下字符串的查找方法:
1)基本字符串查找
2)KMP查找
3)多核cpu下的字符串查找
(一)、首先介绍一下普通的字符串查找方法:
a)指针是否为空,否则返回
b)判断str是否为‘\0’,判断剩下来的字符串长度是否>=模板字符串的长度,只有一个不符合,函数结束运行
c)依次比较字符串和模板字符串的内容,如果全部符合,返回;只要一个不符合,break跳出,str加1,转b)
那么算法应该怎么写呢?朋友们可以自己先书写一下,即使在纸上写也可以。
【介绍: 下一篇博客继续介绍kmp算法】
一步一步写算法(之字符串查找 上篇)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解、字符串的比较、字符串的拷贝、字符串的upper等等。另外一个经常使用但是却被我们忽视的功能就是字符串的查找。word里面有字符串查找、notepad里面有字符串查找、winxp里面也有系统自带的字符串的查找,所以编写属于自己的字符串查找一方面可以提高自己的自信心,另外一方面在某些情况下可以提高软件的运行效率。下面我们就三个方面讨论一下字符串的查找方法:
1)基本字符串查找
2)KMP查找
3)多核cpu下的字符串查找
(一)、首先介绍一下普通的字符串查找方法:
a)指针是否为空,否则返回
b)判断str是否为‘\0’,判断剩下来的字符串长度是否>=模板字符串的长度,只有一个不符合,函数结束运行
c)依次比较字符串和模板字符串的内容,如果全部符合,返回;只要一个不符合,break跳出,str加1,转b)
那么算法应该怎么写呢?朋友们可以自己先书写一下,即使在纸上写也可以。
char* strstr(const char* str, char* data) { int index; int len; if(NULL == str || NULL == str) return NULL; len = strlen(data); while(*str && (int)strlen(str) >= len){ for(index = 0; index < len; index ++){ if(str[index] != data[index]) break; } if(index == len) return (char*) str; str++; } return NULL; }为了说明代码的正确性,我们可以编写几个测试用例测试一下。
void test() { assert(NULL == strstr(NULL, "china")); assert(NULL == strstr("hello, world", "china")); assert(NULL != strstr("hello, china", "china")); }
【介绍: 下一篇博客继续介绍kmp算法】
相关文章推荐
- 一步一步写算法(之字符串查找 上篇)
- 一步一步写算法(之字符串查找 下篇)
- 一步一步写算法(之字符串查找 下篇)
- 一步一步写算法(之字符串查找 下篇)
- 一步一步写算法(之字符串查找 中篇)
- 一步一步写算法(之字符串查找 中篇)
- 一步一步写算法(之字符串查找 中篇)
- 一步一步复习数据结构和算法基础-索引顺序表查找
- 2 在字符串中查找子串 算法
- 字符串常见算法之一:查找一个短串在一个长串中位置
- 给一个字符串S和一个字符串数组T(T中的字符串要比S短许多),设计一个算法, 在字符串S中查找T中的字符串。
- 一步一步复习数据结构和算法基础-斐波那契查找法
- KMP 算法并非字符串查找的优化
- 在字符串中查找子字符串的算法
- 一个非常经典的算法查找字符串中每个字符的个数。
- 字符串查找之模式匹配算法
- 一步一步写算法(之查找)
- 字符串查找字符算法
- 快速查找字符串中首个重复字母算法
- KMP算法 Knuth-Morris-Pratt 字符串查找算法