【C语言进阶】不会处理字符串?一万三千五百字包会保姆级教程

目录

😘前言😘:

一、字符串处理函数介绍🤯:

        1.strlen 函数🥎:

        2.strcpy 函数⚾:

        3.strcat 函数🏀:

        4.strcmp 函数🏈:

        5.strncpy 函数🏉:

        6.strncat 函数🎾:

        7.strncmp 函数🥏:

        8.strstr 函数🏑:

        9.strtok 函数🏓:

        10.strerror 函数⛳:

        11.memcpy 函数🥅:

        12.memmove 函数🎳:

        13.memcmp 函数🥌:

二、模拟库函数的实现🤔:

        1.模拟实现strlen 函数🥎:

        2.模拟实现strcpy 函数⚾:

        3.模拟实现strcat 函数🏀:

        4.模拟实现strcmp 函数🏈:

        5.模拟实现strstr 函数🏑:

        6.模拟实现memcpy 函数🥅:

        7.模拟实现memmove 函数🎳:

三、总结🥳:


🛰️博客主页:✈️努力学习的銮同学

🛰️欢迎关注:👍点赞🙌收藏✍️留言

🛰️系列专栏:💐【进阶】C语言学习

        家人们更新不易,你们的👍点赞👍和👉关注👈真的对我真重要,各位路过的友友麻烦多多点赞关注,欢迎你们的私信提问,感谢你们的转发!

        关注我,关注我,关注我,你们将会看到更多的优质内容!!!


🏡🏡本文重点 🏡🏡:

🚅 字符串处理函数 🚃 模拟库函数🚏🚏

😘前言😘:

        期末考试将至,不知道各位小伙伴们都准备的怎么样了呢?在紧张的复习生活之余,也不要忘记了专业课的学习哟!前面三篇文章我们完整的将我们的指针技术进行了全面的升级,各位小伙伴们又向着大佬之路迈出了坚实的一步。

        本文我门将进入到下一部分的学习中去。通过本课,我们将更加深刻的理解各种字符串函数的处理方式和使用方法,助你工作面试一臂之力!

一、字符串处理函数介绍🤯:

        我们在C语言的从程序代码编写中,对字符和字符串的处理相当频繁,但是我们还知道,C语言本身并没有字符串类型。而字符串通常放在【常量字符串】或者【字符数组】中。其中,字符串常量适用于那些对它不做修改的字符串函数

        知道了字符串在计算机中的储存原理之后,我们就正式开始介绍字符串的使用。

        1.strlen 函数🥎:

        strlen 函数是大家的老朋友了,想必大家也都不陌生了。

        strlen 函数(string length)的作用是用于返回字符串中结束标识符 ' \0 ' 之前出现的的字符个数,因此,strlen函数所处理的字符串对象必须是以结束标识符 ' \0 ' 结尾的字符串。其返回值类型为 size_t 类型,该类型为无符号类型

        我们来看 strlen 函数的基本使用方式:

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

int main()
{
    //两中可行的初始化方式:
	char arr1[]="Hellow!";
	char arr2[] = { 'H','e','l','l','o','w','!','\0' };
	
	int ret1 = strlen(arr1);
	int ret2 = strlen(arr2);

	printf("The length of arr1 is %d\n", ret1);
	printf("The length of arr2 is %d\n", ret2);

	return 0;
}

        我们使用字符型数组将字符串储存起来,接着使用 strlen 函数计算字符串 " Hellow! " 中所有字符的数量(使用双引号初始化字符串时,编译器将会自动在最后添加上结束标识符),并可以使用使用一个整型变量接收 strlen 函数的返回值,进行打印。

        并且我们还说到,strlen 函数的返回类型为无符号数,因此 strlen 函数不可以直接用来比较两个字符串的大小。例如:

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

int main()
{
	const char* str1 = "abcdef";
	const char* str2 = "bbb";

	if (strlen(str2) - strlen(str1) > 0)
	{
		printf("str2 > str1\n");
	}
	else
	{
		printf("srt1 < str2\n");
	}
	return 0;
}

         我们可能会认为计算出的结果为 3 - 6 为 -3,结果会执行 else 语句。但事实上,因为 strlen 函数的返回类型为无符号类型,得出的结果也是无符号类型,于是原本第一位即符号位上的数字也将被作为数据的一部分,因而实际得出的结果为一个非常大的整数,执行了 if 语句

        于是如果我们想要使用 strlen 函数来判断字符串的大小,可以通过让它的返回值由无符号数变为有符号数即可,即强制类型转换来实现:

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

int main()
{
	const char* str1 = "abcdef";
	const char* str2 = "bbb";

	if ((int)strlen(str2) - (int)strlen(str1) > 0)
	{
		printf("str2 > str1\n");
	}
	else
	{
		printf("srt1 < str2\n");
	}
	return 0;
}

        2.strcpy 函数⚾:

        在之前的学习中,strcpy 函数也是我们经常使用的字符串处理函数之一。

        strcpy 函数(string copy)的作用是,可以将字符串从源地址复制至目的地址,通俗来讲就是用来实现字符串的复制和拷贝。并且它会将源地址内的结束标识符 ' \0 ' 一并拷贝过去,因此源地址必须以 ' \0 ' 结尾,且目的地址也将以结束标识符结尾。并且,因为其作用为拷贝字符串,因此目标地址内的空间必须足够大,要有足够的空间容纳下源地址内的字符串,同时目的地址的空间必须是可变、可修改的

        我们来看 strcpy 函数的基本使用方式:

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

int main()
{
	const char arr1[] = "Hellow!";
	const char arr2[10] = { 0 };

	printf("Before copy , the char inside arr1 are %s\n", arr1);
	printf("Before copy , the char inside arr2 are %s\n", arr2);
	printf("\n");

	strcpy(arr2, arr1);
    //strcpy函数使用格式为:strcpy(目的地址, 源地址);

	printf("After copy , the char inside arr1 are %s\n", arr1);
	printf("After copy , the char inside arr2 are %s\n", arr2);

	return 0;
}

        我们初始化字符数组 arr 中的内容,并使 arr2 中内容为空。首先我们将两个字符串进行打印,验证拷贝前两字符串中的存储内容。接着我们使用 strcpy 函数将字符数组 arr1 中的字符串拷贝至 arr2 中,并在此打印两数组中的内容对拷贝结果进行验证。

        我们要特别注意的是 strcpy 函数返回的是目标空间的起始地址,该函数设置返回值值类型的目的是为了实现链式访问(以后会讲到,这里仅做了解)。

        3.strcat 函数🏀:

        这个字符串处理函数就比较陌生了,在我们之前的学习中没有用到过,甚至不曾见过,我们现在就来一起学习它。

        strcat 函数(string catenate)的作用是,将源地址的字符串追加补充至目的地址处。与字符串拷贝函数相同,它在进行补充追加时是从目的地址的结束标识符处 ' \0 ' 开始追加的,追加至源地址的结束标识符处停止。且它同样要求目标地址内的空间必须足够大,要有足够的空间容纳下源地址内的字符串,同时目的地址的空间必须是可变、可修改的

        我们来看 strcat 函数的基本使用方式:

#include<stdio.h>
#i
评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

銮崽的干货分享基地

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

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

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

打赏作者

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

抵扣说明:

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

余额充值