【C语言进阶11——字符和字符串函数及其模拟实现(2))】


前言

本文接着学习字符和字符串函数,并用代码模拟实现。主要学习内容包括:

4、 字符串查找

  • strstr
  • strtok

5、错误信息报告

  • strerror

6、字符操作函数

7、内存操作函数

  • memcpy
  • memmove
  • memset
  • memcmp

4、字符串查找

4.1 库函数 strstr

char * strstr ( const char *str1, const char * str2);
  • 返回指向str1中第一个出现的str2的指针,如果str2不是str1的一部分,则返回空指针
int main()
{
   
	char a1[] = "abbbcdef";
	char a2[] = "bbc";
	char* ret = strstr(a1, a2);

	if (NULL==ret)
	{
   
		printf("找不到子字串\n");
	}
	else
	{
   
		printf("%s\n", ret);
	}
}

4.2 模拟实现库函数 strstr

char* my_strstr(const char* p1, const char* p2)
{
   
	assert(p1&&p2);
	const char* s1 = p1;//赋予指针初始位置
	const char* s2 = p2;//赋予指针初始位置
	const char* cur = p1;//记录字符串当前指针位置

	while (*cur)
	{
   
		s1 = cur;
		s2 = p2;//移到初始位置
		while (*s1 && *s2 && (*s1==*s2))
		{
   
			s1++;//相等时,指针后移,直到两个不相等或者一方为0
			s2++;
		}
		if (*s2=='\0')
		{
   
			return (char*)cur;
		}
		cur++;//不相等,当前指针加1
	}
	//跳出,就是字符串1移动到末尾
	return NULL;
}
int main()
{
   
	char a1[] = "abbbcdef";
	char a2[] = "bbc";
	char* ret = my_strstr(a1, a2);
	if (NULL==ret)
	{
   
		printf("找不到子字串\n");
	}
	else
	{
   
		printf("%s\n", ret);
	}
}

结果见下图:

在这里插入图片描述

4.3 库函数 strtok

char * strtok ( char * str, const char * sep );
  • sep参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

初学C语言者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值