C语言strstr函数与strtok函数详解

前言

strstr() 函数与 strtok() 函数都属于字符串查找函数。

一、strstr函数

1.函数原型

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

2.函数参数、返回值解析

①:const char * str1 被扫描的C字符串,const 表示该字符串不能被修改。
②:const char * str2 包含要匹配的字符序列的C字符串。
③:返回值为一个指针,指向str2中指定的整个字符序列在str1中的第一个出现点,如果str1中没有该序列,则为空指针。

3.strstr 函数模拟实现

char* my_strstr(char* str1, char* str2)
{
	char* str = str1;
	char *s1, *s2;
	if (!(*str2)) //判断str2字符串是否为空字符串
	{
		return str1;
	}
	while (*str)
	{
		s1 = str;
		s2 = str2;
		//当str1与str2开始一一对应是进入循环
		while (*s1 && *s2 && !(*s1 - *s2))
		{
			s1++;
			s2++;
		}
		//进入if表示str2已经匹配完
		if (!(*s2))
		{
			return str;
		}
		str++;
	}
	return NULL;
}


int main()
{
	char arr1[] = "abcdefg";
	char arr2[] = "def";
	char* ret = my_strstr(arr1, arr2);
	printf("%s\n", ret);
	return 0;
}

输出结果
在这里插入图片描述

二、strtok函数

1.函数原型

char * strtok ( char * str, const char * sep );

2.函数参数、返回值解析

①:const char * sep 该参数是个字符串,定义了用作分隔符的字符集合;
②:char * str 该参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
③:返回值为一个指针,指向被切割的字符串的首地址。

3.注意事项

①:strtok函数在 str 字符串中找到分割符标记会将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改
变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
②:strtok函数的第一个参数不为 NULL ,函数将找到str中第一个分隔符标记,strtok函数将保存它在字符串中的位置并返回被切割出来的字符串的首地址。
③:strtok函数的第一个参数为 NULL ,函数将从第二条注意事项中被保存的位置开始查找下一个标记。
④:如果字符串中不存在更多的标记,则返回 NULL 指针。

3.strtok 函数实现

#include <stdio.h>
#include <string.h>


int main()
{
	char arr[] = "mingtian@hui#genghao/";
	char* p = "@#/";
	char* ret = NULL;
	for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
	{
		printf("%s\n", ret);
	}
	return 0;
}

输出结果
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

情话0.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值