模拟实现 strstr(字符串查找) --浅谈C语言
  C0Tz0A5KKSwy 2024年08月07日 64 0

C 字符串查找 - strstr()

描述

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

声明

下面是 strstr() 函数的声明。

char *strstr(const char *haystack, const char *needle)

参数

  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜索的小字符串。

haystack 干草堆

needle 针

来源推导: 干草堆里捞针/大海捞针.

参考VS命名

haystack == string

needle == substring

返回值

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

模拟实现

#include<assert.h>


char *  strstr (const char * str1, const char * str2)
{
        char *cp = (char *) str1; //强转成非const ; cp不修改原指针的指针变量副本
        char *s1, *s2;

				//要找的字串为空,返回
        if ( !*str2 )
            return((char *)str1);

				//暴力查找
        while (*cp) 
        {
        				//小循环用的临时副本
                s1 = cp;
                s2 = (char *) str2;
								//循环比较
                while ( *s1 && *s2 && !(*s1-*s2) ) //strcmp
                        s1++, s2++;

								//循环结束后,找到了(s2走到'\0'),返回字串起始地址cp
                if (!*s2) 
                        return(cp);
								
								//找下一个
                cp++; 
        }
				//走到末尾,找不到,返回空
        return(NULL);

int main()
{
    char* p1 = "abcddefdef";
    char* p2 = "def";
    char* ret = my_strstr(p1, p2);
    if (ret == NULL)
        printf("子串不存在\n");
    else
        printf("%s\n", ret);
    return 0;
}  
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月07日 0

暂无评论

推荐阅读
  gtqiVYjgvftt   12天前   35   0   0 C语言
  FZifmKVgRC4p   2024年08月13日   33   0   0 C语言
  C0Tz0A5KKSwy   2天前   12   0   0 C语言
  IbmESGwVVrv0   2024年08月16日   154   0   0 C语言
  FZifmKVgRC4p   2024年08月16日   88   0   0 C语言
C0Tz0A5KKSwy