模拟实现 strstr(字符串查找) --浅谈C语言

打印 上一主题 下一主题

主题 884|帖子 884|积分 2652

C 字符串查找 - strstr()

描述

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。
声明

下面是 strstr() 函数的声明。
  1. char *strstr(const char *haystack, const char *needle)
复制代码
参数


  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜刮的小字符串。
haystack 干草堆
needle 针
来源推导: 干草堆里捞针/大海捞针.
参考VS命名
haystack == string
needle == substring
返回值

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
模拟实现
  1. #include<assert.h>
  2. char *  strstr (const char * str1, const char * str2)
  3. {
  4.        char *cp = (char *) str1; //强转成非const ; cp不修改原指针的指针变量副本
  5.        char *s1, *s2;
  6.                                 //要找的字串为空,返回
  7.        if ( !*str2 )
  8.            return((char *)str1);
  9.                                 //暴力查找
  10.        while (*cp)
  11.        {
  12.                                        //小循环用的临时副本
  13.                s1 = cp;
  14.                s2 = (char *) str2;
  15.                                                                 //循环比较
  16.                while ( *s1 && *s2 && !(*s1-*s2) ) //strcmp
  17.                        s1++, s2++;
  18.                                                                 //循环结束后,找到了(s2走到'\0'),返回字串起始地址cp
  19.                if (!*s2)
  20.                        return(cp);
  21.                                                                
  22.                                                                 //找下一个
  23.                cp++;
  24.        }
  25.                                 //走到末尾,找不到,返回空
  26.        return(NULL);
  27. int main()
  28. {
  29.     char* p1 = "abcddefdef";
  30.     char* p2 = "def";
  31.     char* ret = my_strstr(p1, p2);
  32.     if (ret == NULL)
  33.         printf("子串不存在\n");
  34.     else
  35.         printf("%s\n", ret);
  36.     return 0;
  37. }  
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表