C语言学习—字符串函数总结string

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工作原理:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值