首页 > 其他分享 >模拟实现 strstr(字符串查找) --浅谈C语言

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

时间:2024-08-04 22:39:10浏览次数:11  
标签:strstr 浅谈 s2 C语言 char const haystack cp

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;
}  

标签:strstr,浅谈,s2,C语言,char,const,haystack,cp
From: https://www.cnblogs.com/DSCL-ing/p/18342329

相关文章

  • 【Redis】全局命令/内部编码/浅谈单线程模型
    目录前言两个核心命令GET和SET全局命令KEYSEXISTS DELEXPIRETTLTYPE 数据结构的内部编码Redis的5中数据类型Redis数据结构和内部编码单线程架构前言Redis提供了5种数据结构,理解每种数据结构的特点对于Redis开发运维⾮常重要,同时掌握每种数据结构的常......
  • C语言学习----常用函数
    1.输入输出:scanf输入printf输出格式:scanf("格式控制符",变量的地址);printf(“格式控制符”,变量);注意变量的地址和变量不同,变量的地址用取址符&加变量名组成例如&a;inta;scanf("%d",&a);printf("%d",a);这段代码会要求从控制台输入一个整数,然后输出它。格式控制......
  • C语言零基础学习笔记12——数组(一)
    本节大纲一、数组的概念二、一维数组的创建和初始化三、一维数组的使用四、一维数组在内存中的储存五、sizeof计算数组元素个数一、数组的概念        数组的概念是一组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:1、数组中存放的是1个......
  • 模拟实现 srtcat(字符串追加) --浅谈C语言
    strcat描述char*strcat(char*dest,constchar*src)把src所指向的字符串追加到dest所指向的字符串的结尾。声明下面是strcat()函数的声明。char*strcat(char*dest,constchar*src)参数dest--指向目标数组,该数组包含了一个C字符串,且足够容纳追加后的字符......
  • C语言--++a,a++的区别
    //前缀形式:int&int::operator++()//这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用{//函数本身无参,意味着是在自身空间内增加1的*this+=1;//增加return*this;//取回值}//后缀形式:constintint::operator++(int)//函数返回值是一......
  • 位段 -- 内存布局详解-浅谈C语言
    目录位段位段的介绍位段使用示例:位段的内存分配Example内存分配解析:位段的跨平台问题位段位段的介绍位段(二进制位):就是按位存储位段(bit-field)是C语言中的一种特殊数据类型,它允许将一个字节分成几个部分,并为每个部分指定特定的位数,以便在内存中存储和访问这些部分。其中位......
  • C语言--基本数据类型
    数据类型概述数据类型分类基本数据类型构造数据类型指针类型空类型标识符规范在C语言中,一般标识符用于变量名、宏名、函数名…注意事项:可用数字、英文字母(大小写)、下划线、美元符形如:data、temp、func()、add_int()、xxx_123()数字不能位于开头不能和关键字重复si......
  • c语言·其三
    返回值8位—al16位—ax32位—eax64位—eax(放低位,edx(高位64: 32:1、char(两个字节)类型的返回值  2、short(两个字节)类型的返回值  3、int(八个字节)类型的返回值  参数传递无论是char还是short类型,反汇编中都是以4个字节传递结论:整数类型的参数,一律使用int类型......
  • 代码优化:使用C语言重构单片机汇编启动代码
    目录前言实现思路单片机启动流程汇编语言分析开发环境代码分析总结前言在近期的工作需求中,我需要对实时操作系统(RTOS)的底层代码进行一些必要的调整。为此,我重新深入研究了ARM架构的相关知识点。在这一过程中,我回顾了之前一直让我感到困惑的一个技术问题:在几乎所有的......
  • 15.75.【C语言】表达式求值
    目录一.整型提升1.定义2.一.整型提升1.定义C语言中整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升2.整型提升的原因:表达式的整型运算要在CPU的相应运算器件......