算法strstr实现

  1. #include   
  2.   
  3. const char *my_strstr(const char *str, const char *sub_str)  
  4. {  
  5.     for(int i = 0; str[i] != '\0'; i++)  
  6.     {  
  7.         int tem = i; //tem保留主串中的起始判断下标位置   
  8.         int j = 0;  
  9.         while(str[i++] == sub_str[j++])  
  10.         {  
  11.             if(sub_str[j] == '\0')  
  12.             {  
  13.                 return &str[tem];  
  14.             }  
  15.         }  
  16.         i = tem;  
  17.     }  
  18.   
  19.     return NULL;  
  20. }  
  21.   
  22. int main()  
  23. {  
  24.     char *s = "1233345hello";  
  25.     char *sub = "345";  
  26.     printf("%s\n", my_strstr(s, sub));  
  27.     return 0;  
  28. }  




点击(此处)折叠或打开

  1. int strstr(char *string, char *substring) 
  2. {
  3.    if (string == NULL || substring == NULL)
  4.           return -1;
  5.  
  6.    int lenstr = strlen(string); 
  7.    int lensub = strlen(substring);

  8.    if (lenstr < lensub)
  9.         return -1;
  10.  
  11.    int len = lenstr - lensub;
  12.    for (int i = 0; i <= len; i++) //复杂度为 O(m*n)
  13.    { 
  14.      for (int j = 0; j < lensub; j++)
  15.      {
  16.         if (string[i+j] != substring[j])
  17.              break;
  18.      }
  19.         if (j == lensub)
  20.           return i + 1;
  21.    }
  22.     return -1;
  23.  }


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29012686/viewspace-1145082/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29012686/viewspace-1145082/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值