C语言学习—字符串函数总结string
和字符串有关的函数有很多,只需要学习常用的4种就够用,其他的在后面用到的时候自然而然就会。
在学习这些函数之前我们需要知道,为什么字符串会有大小之分(清楚后会对这几个函数有更深得了解):因为计算机是不认识字符的,他只认识1和0这两个数值。ASCII的十进制数由32个二进制组成,所以计算机的CPU只要比较ASCII中字符对应的数值就可以求出那个字符串大,这也是为什么字符串有大小的原因。ASCII图下面有:
这次总结的4个函数是:strlen、strcmp、strcpy、strcat.
函数的头文件是:#include <stdio.h>
strlen:
strlen是计算字符串有效长度的函数。格式:strlen(字符数组名字)
{
char a[10] = "hello" ;
int num ;
strlen(a) ;
printf("字符数组a的长度为%d", num);
//输出字符串a的长度是5
}
即使字符数组的长度是10个字节的空间,但是strlen只会求出字符数组的有效长度。
strlen的工作原理:
strlen会遍历字符数组,同时开始计数。当遇到结束标志符‘\0’的时候,就结束遍历,同时以遍历的个数作为返回值输出。
{
char a[20] = "hello\0sd"
int num;
num = strlen(a);
printf("num=%d\n",num);
//还是输出字符串a的长度是5
return 0;
}
strcmp:
strcmp是比较两个字符串大小的。字符串也有大小?有,字符串是由字符组成的,字符在计算机中是由ASCII组成的。所以字符串也有大小。下面是ACCII表的一部分:
格式:strcmp(字符串1的名字,字符串2的名字);字符串1减字符串2。代码参考如下:
{
char a[20] = "hello",b[20] = "gzzzz";
int num;
num = strcmp(a,b);
printf("num=%d\n",num);
return 0; //输出num = 1 > 0;代表字符串a>字符串b
}
strcmp的工作原理:
strcmp比较字符串时有种大情况:字符串长度不相等时->字符串相等时,分情况分析:
2.1 字符串长度不相等:strcmp找到两个字符串中最短的字符串的最大有效下标n,用字符串a的对应下标n减去字符串b的对应下标n,得到的值作为返回值(字符有对应的十进制数的,看上面的ACSII表,就是他们对应的十进制数值进行相减),下标n之前的元素就不管了,这就是两个要比较的字符串长度不同时,strcmp的工作原理。
{
char a[20] = "hello",b[20] = "helloA";
int num;
num = strcmp(a,b);
printf("num=%d\n",num);
return 0; //输出num = 65 > 0;代表字符串a>字符串b
}
2.2 字符串长度相同时:当两个字符串长度相等时,strcmp就会从下标0开始,逐个对比字符串的字符元素对应的ASCII的大小(有点绕),意思就是逐个对比字符对应ASCII的十进制数值的大小。回到strcmp原理上面,当所有数组所有有效元素的ASCII值之差都是0时,那么0就作为函数的返回值输出。
{
char a[20] = "hello",b[20] = "hello";
int num;
num = strcmp(a,b);
printf("num=%d\n",num);
return 0; //输出num = 0;代表两个字符串相等
}
当逐个比较元素时,在第n位出现了两个字符的ASCII值之差不为0的时候,那么后面的元素就不会比较了,函数会以n的返回值输出,n有正也有负,我们就可以通过判断strcmp函数的返回值的正负还是为0从而判断出两个字符串谁大谁小了。
{
char a[20] = "hello",b[20] = "hhllo";
int num;
num = strcmp(a,b);
printf("num=%d\n",num);
return 0; //输出num = -3 < 0;代表字符串a<字符串b
}
总结:当strcmp的返回值>0时,字符串a>字符串b;当strcmp的返回值=0时,字符串a=字符串b;当strcmp的返回值<0时,字符串a<字符串b;
strcpy:
格式:strcpy(字符串a,字符串b);
作用:strcpy是把字符串b的内容复制到字符串a中,不会覆盖字符串a的内容。
参考代码:
{
char a[20] = "hello",b[4] = "hahh";
strcpy(a,b);
printf("a=%s\n",a);
return 0;
}//下面是输出结果:
strcpy工作原理:
strcpy函数会从下标0开始,逐个读取字符串的数据,字符串b的第n位存放到字符串a的第n位。字符串b每把一个元素放进字符串a里,字符串a里原本的数据就会先往后面移一位,所以字符串a里面的数据不会被覆盖。只要字符串a的空间能够容纳字符串b的数据,字符串a原本的数据就不会因为内存溢出原因而出错。
{
char a[20] = "hello",b[4] = "hahh";
strcpy(b,a);
printf("a=%s\n",a);
return 0;
}
strcat:
格式:strcat (字符串a,字符串b);
作用;strcat是把两个字符串拼接在一起的函数。简单的理解就是:我们前面说到strcap是把字符串b插到字符串a前面,那么strcat函数就是把字符串b插到字符串a后面。具体来看strcat的工作原理:
strcat工作原理: