目录
🛰️博客主页:✈️努力学习的銮同学
🛰️欢迎关注:👍点赞🙌收藏✍️留言
🛰️系列专栏:💐【进阶】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