首页 > 其他分享 >每天深解一个字符串类函数之strstr函数

每天深解一个字符串类函数之strstr函数

时间:2024-08-13 18:23:36浏览次数:14  
标签:strstr 函数 str2 str1 char 深解 s2 字符串

目录

前言:

一、引用头文件

二、strstr函数的作用

三、理解strstr函数的定义

1、返回类型

2、参数 

四、使用strstr函数

1、编写程序

2、调试运行

五、注意要点 

六、模拟实现


前言:

每天深入了解一个字符串类函数,今天我们要学习的是strstr函数,相信你学玩之后会对字符串类函数有更深的了解,坚持下去你又将超过百分之九十九的人。

一、引用头文件

C语言:

#include <string.h>

C++:

#include <cstring>

二、strstr函数的作用

strstr函数是用于判断一个字符串内部是否包含另一个字符串。('\0'不计算于内)

(具体的在定义处讲解)

三、理解strstr函数的定义

char* strstr(const char* str1,const char* str2);

1、返回类型

C语言标准规定:库函数strstr的返回类型为一个char*的指针。

当str1指针指向的字符串包含str2指针指向的字符串时,返回str1指针指向的字符串中str2指向的字符串的起始位地址。

例如:abcdef字符串中包含cde字符串用该函数会返回abcdef字符串中c的地址。

当str1指针指向的字符串不包含str2指针指向的字符串,返回一个空指针即NULL。

2、参数 

C语言标准规定:strstr函数的参数有两个,一个为const char* str1(一个字符指针,前用const修饰使其不能通过指针更改其指向的字符串)用于表示要判断是否包含另一个字符串的字符串(可形象理解为长字符串,“长”不含绝对意义);另一个为const char* str2用于表示是否被包含的字符串(可形象理解为短字符串,“短”亦无绝对意义)。

四、使用strstr函数

1、编写程序

#include <string.h>
#include <stdio.h>
int main()
{
	char arr1[] = "abbbcdef";
	char arr2[] = "bbc";
	char* ret = strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("没找到!\n");
	}
	else
	{
		printf("找到了:%s\n",ret);
	}
	return 0;
}

2、调试运行

五、注意要点 

全程无坑,请放心使用。(若有问题可在评论区补充)

六、模拟实现

#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1,const char* str2)
{
	assert(str1 && str2);
	const char* s1 = NULL;
	const char* s2 = NULL;
	const char* cp = str1;//代每次比较首字符地址
	if (*str2 == '\0')//当str2为空字符串直接返回str1表示起始位置地址
	{
		return (char*)str1;
	}
	while (*cp)
	{
		s1 = cp;//代str1当前比较字符地址
		s2 = str2;//代str2当前比较字符地址
		while (*s1 == *s2)
		{
			
			s1++;
			s2++;
			if (*s2 == '\0')
			{
				return (char*)cp;
			}
		}
		
		cp++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "abbbcdef";
	char arr2[] = "bbc";
	char* ret = my_strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("没找到!\n");
	}
	else
	{
		printf("找到了:%s\n",ret);
	}
	return 0;
}

*其中重点循环位置的梳理

while (*s1 == *s2)
{
			
	s1++;
	s2++;
	if (*s2 == '\0')
	{
		return (char*)cp;
	}
}

当s1位置为'\0',s2位置不为'\0',循环结束;当s1位置不为'\0',s2位置为'\0',因其先加后判会满足if条件结束程序;当s1与s2都为'\0'也会因为满足if条件结束程序。

每日一学,今天你又超过了百分之九十九的人。

如果本篇文章对你有帮助,请点个关注和赞吧!

标签:strstr,函数,str2,str1,char,深解,s2,字符串
From: https://blog.csdn.net/gybhh/article/details/141116742

相关文章

  • C语言-有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见 图8.43。写
    1.题目要求:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图8.43。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。2.解题思路:可采用指针法,可将数组中最后一位元素的值赋给中间变量暂存,然后将剩余数组中的元素通过指针依次后移一位......
  • SQL进阶技巧:利用Stack()函数进行列转行及动态列转行方法
    目录0需求描述1数据分析 2 stack()函数应用stack(intn,v_1,v_2,...,v_k)n设为3,将后面6个元素按顺序分为3行2列n设为2,将后面6个元素按顺序分为2行3列n设为3,将后面7个元素按顺序分为3行3列n设为6,将后面6个元素转为为6行1列 3小结0需求描述在hive数仓中......
  • C++静态函数
    由于本人C++小白,关于C++的很多基础概念都不太理解,在工作当中遇到了静态函数,在函数的使用和调用外部函数与普通函数还是非常不一样的,故这里向AI请教,简单做个记录。AI的回答内容如下:Yousaid:C++当中静态函数的优势是什么ChatGPTsaid:在C++中,静态函数(static函数)是指通过在函......
  • scanf函数
    基本用法用于读取用户的键盘输入,原型定义在头文件stdio.h。scanf()的第一个参数是格式字符串,里面会放置占位符,告诉编译器即将提取是数据类型,与printf()的占位符基本一致。其余参数用于存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。#include<stdio.h>intm......
  • 归一化指数函数——softmax函数
    概念与应用Softmax函数常用于多分类任务,将模型输出值归一化到[0,1]范围内,作为样本的概率。二分类可以看作是多分类的一种。因此,Softmax函数可以兼容logistics函数。logistics可以将输出归一化到[0,1],但是仅输出正类的概率值。Softmax可以输出每一个样本对应的概率值。实际使用中,......
  • JavaScript函数
    定义函数形如functionabs(x){if(x>=0){returnx;}else{return-x;}}或varabs=function(x){if(x>=0){returnx;}else{return-x;}};如上所表达的函数为一个匿名函数,它没有函数名,该......
  • 23.python函数
    (1)len函数:返回字符的长度计算列表的长度、字符长度、元组的长度、字典长度案例:list=[1,2,3,4]print(len(list))#4(2)abs绝对值a=-1print(abs(a))#1(3)sum函数求和print(sum(range(1,101)))list=[1,2,3,4]print(sum(list))#104、max最大值list=[1,2,......
  • Windows出现出现身份验证错误。要求的函数不受支持 远程计算机: 10.17.1.2 这可能是由
    Windows出现出现身份验证错误。要求的函数不受支持远程计算机:10.17.1.2这可能是由于CredsSP加密数据库修正。若要了解详细信息,请访问https://go.microsoft.com/fwlink/?linkid=866660解决方案解决方法第一步点开控制面板选择系统与安全第二步选择“允许远程访问......
  • C++——构造函数和析构函数
    一、初识构造函数和析构函数简单来说,有对象生成必然会调用构造函数,有对象销毁必然会调用析构函数。构造函数的作用是初始化成员变量,是由编译器去调用的,而析构函数同理也是由编译器调用,不过他的作用则是清理。可以由下面的代码体验两个函数的使用。注意:相同点:两个函数都没有......
  • 加解密工具类 - C#小函数类推荐
          此文记录的是一个8比特的加解密算法的函数。/***加解密工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comDate:2024-01-1515:18:00使用说明:......