前言
1.求字符串长度函数
strlen函数
我们要求一个字符串函数的长度,strlen通常是我们的第一选择,它被包含在string.h头文件中,我们以下要介绍的字符函数和字符串函数都被包含在这个头文件中,这个函数的声明为:
size_t strlen ( const char * str );
为什么它的返回类型是size_t呢,首先我们要知道size_t是无符号整型类型,因为我们字符的长度不可能是负数,所以我们的返回值选择用无符号整型,那么这个函数内部是如何实现的呢?
我们写一段代码演示:
#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abcdef";size_t sz = strlen(arr);printf("%zd\n", sz);return 0;
}
我们来看结果:
一个字符串的末尾隐藏着一个\0,strlen就是通过一个一个字符记数,找到\0后就停下然后返回那个记数的值,画图演示:
strlen函数从a开始走,只要没遇到\0就一直往后走,走一个字符记数加一,直到遇到\0时,他就停止向后走,函数工作结束并返回那个记数的值。
注意事项:
总结:strlen函数是一个求字符串长度的函数,内部的工作原理是只要不遇到\0就一直向后走并记数,遇到\0就停下。
2.长度不受限制的字符串函数
strcpy函数
strcpy是用来将一个字符串复制到另一个数组的函数,函数声明为:
char* strcpy(char * destination, const char* sourse)
因为我们要从一个数组中复制字符串到另一个数组中,所以用两个字符指针接收它们的首地址,sourse指向的函数是不需要改变它里面的值的,所以我们用const来修饰它,防止有人改变它的值,增加程序的鲁棒性,在复制完内容后,我们把接收了字符串的那个数组的首地址返回,代码演示:
int main()
{char arr1[] = "abcdef";char arr2[20] = { 0 };strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}
我们来看一下结果:
使用strcpy函数,arr1数组中的字符串很轻松就被复制到了arr2数组中,但是函数也有一些注意事项需要遵守,否则会出现一些无法预知的问题 。
注意事项:
1.源数组字符串必须以\0结尾。
2.目标数组空间必须足够大,能够放得下源字符串的内容。
3.目标空间必须可变。
总结:strcpy是一个复制字符串的函数
stract函数
stract函数的功能是将一个字符串复制到另一个字符串的结尾,使得到字符内容的字符串变长,函数声明为:
char * strcat ( char * destination, const char * source );
它的函数声明与strcpy函数一样,就不过多介绍了,假设我们要进行这样的操作,用代码演示:
int main()
{char arr1[20] = "abcdrf";char arr2[] = "wed";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}
代码中表示我们要将arr2数组中的内容放到arr1数组的结尾:
我相信通过代码的演示大家已经了解了strct函数的使用,这里还有使用此函数的一些注意事项。
注意事项:
strcmp函数
strcmp是字符串比较函数,使用它可以对两个字符串比较,在排序等情况中可以使用此函数,我们来看看这个函数的声明吧:
int strcmp ( const char * str1, const char * str2 );
在介绍它的函数声明之前,我们先介绍这个函数的工作原理。我们向strcmp函数放入两个数组的首地址 ,它会对两个字符串的字符进行比较,如果相等就往后比,只要有一位分出大小,就会分出大小,假设我们有一个字符串abcdef和另一个abcq使用strcmp函数进行比较前三位都是abc,所以会往下比,当比到第四位时,是d和q进行比较,c的ascall码为99,q的ascall码为112,当有一位字符比出大小时,就会判定abcq比abcdef大,因为abcdef在前,所以函数判定的结果是小于,返回小于0的数字,如果比到最后,两个字符串都一样,则返回0,如果前面那个字符串比后面那个字符串大,则返回一个大于0的数字。
现在我们再看函数声明,也不难理解这个函数的两个参数是指针,用来接收两个数组的首地址,因为只要比较它们的值,不需要改变它们的值,所以用const修饰。
例如我们要比较两个数组中的字符串,我们用代码演示:
int main()
{char arr1[20] = "abcdrf";char arr2[] = "abcq";int ret=strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}
看结果怎么样:
函数判定abcdef比abcq小,所以返回了一个小于0的数字。
标准规定: