C语言的字符串库函数

个人博客主页:博主首页       


        

目录

         strlen字符串的长度

         strcpy字符串拷贝

         strcmp字符串比较(>0、<0、=0)

         strcat追加字符串

         strstr在字符串中找子串

         strtok拆分字符串

         perror打印错误信息


        strlen字符串的长度

求字符串长度,统计\0之前出现的字符个数,库函数模拟代码如下

size_t my_strlen(char* str)
{
	while (1)
	{
		if (*str == '\0')//如果*str等于0,就返回0的值
		{
			return 0;
		}
		else
		{
			return 1 + my_strlen(++str);//把++str传给下一次的函数调用
		}
	}
}

int main()
{	
	size_t ret = my_strlen("abcde");
	printf("%zu\n", ret);
	return 0;
}

 strcpy字符串拷贝

将第二个字符串拷贝到第一个字符串,库函数模拟代码如下

char* my_strcpy(char* str1, char* str2)
{
	char* ch = str1;//ch保存str1首元素的地址,因为后面str1指向\0的地址了
	while (*str1++ = *str2++)
	{
		;
	}
	return ch;
}

int main()
{
	char arr1[20] = "abcdefgh";
	char arr2[20] = "hgfedcba";
	char* ch = my_strcpy(arr1, arr2);
	printf("%s\n", ch);
	printf("%s\n", arr1);
	return 0;
}

          strcmp字符串比较(>0、<0、=0)

如果第一个大于第二个,则返回大于0的数,否则返回小于0的数,相等则返回0,库函数模拟代码如下

int my_strcmp(const char* p1, const char* p2)
{
	while (*p1 == *p2)//当两个字符相等进来
	{
		if (*p1 == '\0')//如果遇到\0,则这两个字符串相等
		{
			return 0;
		}
		p1++;
		p2++;
	}
	return (*p1 - *p2);
}

int main()
{
	char arr1[] = "abc";
	char arr2[] = "abcd";
	int ret = my_strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf("大于\n");
	}
	if (ret < 0)
	{
		printf("小于\n");
	}
	if (ret == 0)
	{
		printf("等于\n");
	}
	return 0;
}

        strcat追加字符串

把第二个字符串追加到第一个字符串\0位置处,库函数代码使用如下

int main()
{
	char arr1[220] = "abc";
	char arr2[] = "defg";
	char* ret = strcat(arr1, arr2);
	printf("%s\n", ret);
	return 0;
}

        strstr在字符串中找子串

库函数代码使用如下

int main()
{
	char arr1[100] = "bbbcccabcbbbbbbbbabca";
	char arr2[] = "abc";
	char* ret = strstr(arr1, arr2);//结果是abc和后面的字符
	printf("%s\n", ret);
	return 0;
}

        strtok拆分字符串

库函数使用如下

int main()
{
	char arr[] = "welcome * to.china i";
	char sep[] = "* .";
	char* ret = strtok(arr, sep);
	while (ret != NULL)
	{
		if (ret != NULL)
		{
			printf("%s ", ret);
		}
		ret = strtok(NULL, sep);
	}
	return 0;
}

perror打印错误信息

这样使用

int main()
{
	FILE* pf = fopen("a.txt", "r");
	perror("pf");//将 errno 的值解释为错误消息,并将其打印到 stderr(标准错误输出流,通常是控制台),并可以选择在它前面加上 str 中指定的自定义消息。
	return 0;
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值