一步一步写算法(之字符串查找 上篇)

原贴地址:http://blog.csdn.net/feixiaoxing/article/details/6908453

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】


    字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解、字符串的比较、字符串的拷贝、字符串的upper等等。另外一个经常使用但是却被我们忽视的功能就是字符串的查找。word里面有字符串查找、notepad里面有字符串查找、winxp里面也有系统自带的字符串的查找,所以编写属于自己的字符串查找一方面可以提高自己的自信心,另外一方面在某些情况下可以提高软件的运行效率。下面我们就三个方面讨论一下字符串的查找方法:

    1)基本字符串查找

    2)KMP查找

    3)多核cpu下的字符串查找

    

    (一)、首先介绍一下普通的字符串查找方法:

    a)指针是否为空,否则返回

    b)判断str是否为‘\0’,判断剩下来的字符串长度是否>=模板字符串的长度,只有一个不符合,函数结束运行

    c)依次比较字符串和模板字符串的内容,如果全部符合,返回;只要一个不符合,break跳出,str加1,转b)

    那么算法应该怎么写呢?朋友们可以自己先书写一下,即使在纸上写也可以。

[cpp]  view plain copy
  1. char* strstr(const char* str, char* data)  
  2. {  
  3.     int index;  
  4.     int len;  
  5.   
  6.     if(NULL == str || NULL == str)  
  7.         return NULL;  
  8.   
  9.     len = strlen(data);  
  10.     while(*str && (int)strlen(str) >= len){  
  11.         for(index = 0; index < len; index ++){  
  12.             if(str[index] != data[index])  
  13.                 break;  
  14.         }  
  15.   
  16.         if(index == len)  
  17.             return (char*) str;  
  18.   
  19.         str++;  
  20.     }  
  21.   
  22.     return NULL;  
  23. }  
    为了说明代码的正确性,我们可以编写几个测试用例测试一下。

[cpp]  view plain copy
  1. void test()  
  2. {  
  3.     assert(NULL == strstr(NULL, "china"));  
  4.     assert(NULL == strstr("hello, world""china"));  
  5.     assert(NULL != strstr("hello, china""china"));  
  6. }  


【介绍: 下一篇博客继续介绍kmp算法】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值