c语言——字符串处理函数

注意注意,用这个的时候加上#include<string.h>
要不然疯狂报错


strlen和sizeof–长度


strlen

用法:strlen(字符串数组符号)
解释:strlen 函数用于返回指定字符串的长度。
C 语言字符串的长度取决于结束符(’\0’)的位置。
一个字符串的长度指的是从起始位置到结束符的字符个数(不包含结束符‘\0’本身。
对于字符串的长度和字符串数组的大小开始的时候很容易混淆
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "123456789";//预设100个位置,这里有9个字符
	printf("%u", strlen(str1));//打印出来
}

结果:
在这里插入图片描述
温馨提示:size_t 被定义于 stddef.h 头文件中,它事实上就是无符号整形(unsigned int)。所以用%u

sizeof

用法:sizeof(字符串数组)
解释:字符串数组大小
上边代码定义一个可以存放 100 个字符的数组sizeof(mystr) 的结果是 100
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "123456789";//预设100个位置,这里有9个字符
	printf("%u\n", sizeof(str1));//打印出来
	printf("%d", sizeof(str1));//个人暴力理解,其实d和u也差不多
	//但是u就是一定是正数才可以,如果一个负数用u,就凉了
}

结果:
在这里插入图片描述


strcpy 与strncpy–拷贝


strcpy

用法:strcpy(目标数组, 待拷贝的字符串)
解释:函数将待拷贝字符串拷贝到目标数组中。
如果待拷贝字符串的长度小于目标数组,有‘\0’来作为结束符号,但是如果待拷贝字符串长度大于目标数组,就会有溢出,意思就是会遗漏出来,但是vs2017就直接报错了
栗子1:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = "123456789";//
	char str2[11];
	char str3[4];
	strcpy(str2, str1);//可以容纳
	//strcpy(str3, str1);//会有漏掉的部分
	printf("%s\n", str2);//打印出来
	//printf("%s",str3);
}

结果:
在这里插入图片描述
栗子2:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = "123456789";//
	char str2[11];
	char str3[4];
	//strcpy(str2, str1);//可以容纳
	strcpy(str3, str1);//会有漏掉的部分
	//printf("%s\n", str2);//打印出来
	printf("%s",str3);
}

结果:
在这里插入图片描述

strncpy

用法:strncpy(目标数组, 待拷贝的字符串,指定长度n)
解释:函数将待拷贝字符串的 n 个字符拷贝到目标数组中。
如果待拷贝字符串的长度小于 n,那么就用 ‘\0’ 填充额外的空间。
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "123456789";//这里有9个字符
	char str2[100] = "";//预设100个位置
	strncpy(str2, str1,8);
	printf("%s", str2);//打印出来
}

结果
在这里插入图片描述

如果待拷贝字符串的长度大于或等于 n,那么只有 n 个字符被拷贝到目标数组中
(注意:这样的话将不会以结束符 ‘\0’ 结尾)。会有缺少部分。
提示:为了使该函数更“安全”,建议使用 数组名[sizeof(数组名) - 1] = ‘\0’; 语句确保目标字符串是以 ‘\0’ 结尾。
源字符串和目标数组的位置不应该重叠。虽然不报错,但是主要是这样没有什么变化,没有啥意义。
举个栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "123456789";
	strncpy(str1, str1,5);//你不会天真的认为结果是12345吧,哈哈,那就错了
	printf("%s",str1);
}

结果:
在这里插入图片描述


strcat与strncat–连接


strcat

用法:strcat(数组1,数组2)
解释:strcat 函数用于连接两个字符串。
将源字符串拷贝并连接到目标数组存放的字符串后边,此过程将覆盖第一个参数的结束符 ‘\0’。两个参数的位置不应该重叠。
栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "hello";//注意这里要有大于两个字符串长度之和的数组大小
	//要不然又开始报错了
	char str2[] = "how are you?";
	strcat(str1, str2);
	printf("%s\n",str1);
}

结果;
在这里插入图片描述
返回值:返回值是指向目标字符串的指针。
如果觉得丑,可以用这个

栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "hello";
	char str2[] = "how are you?";
	strcat(str1, "!");
	strcat(str1,str2);
	printf("%s\n",str1);
}

结果:
在这里插入图片描述

strncat

用法:
strncat(数组1,数组2,字符串长度n)
解释:
注意,对于数组1,应该包含一个字符串,并且有足够容纳连接后的总字符串长度的空间。
strncat 函数用于拷贝数组2中的 n 个字符到目标数组的字符串后边,并在末尾添加结束符 ‘\0’。
如果数组2的长度小于 n,那么不会像 strncpy 函数那样使用 ‘\0’ 进行填充(但结束符 ‘\0’ 还是有的)。
另外,目标数组中的原有的字符串并不算在 n 中
栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[100] = "hello";//这里的100,为后面新字符串的加入留有足够空间
	char str2[] = "how are you?";
	strncat(str1, "!",1);
	strncat(str1,str2,1);
	printf("%s\n",str1);
}

结果:
在这里插入图片描述


strcmp与strncmp–比较ASCII码


strcmp

用法:
strcmp(数组1,数组2)
解释:
strcmp 函数用于比较两个字符串。
该函数从第一个字符开始,依次比较每个字符的 ASCII 码大小,直到发现两个字符不相等或抵达结束符(’\0’)为止。
如果相等返回0;数组1某个ASCII码大于第二个,按顺序的,就返回大于0的数;如果小于,就返回小于0的数,判断到有不一样的地方就直接终止。
同时strcmp经常会和!一起使用,比如说!strcmp(数组1,数组2)
就是strcmp==0的意思。会用于判断

栗子:

//字符串处理函数
#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abc";
	char str2[] = "bbc";
	(!strcmp(str1, str2)) ? printf("same") : printf("different");//这个是一个判断的骚操作
	//喜欢的可以百度一下,但是如果懒也没关系,我下次会详细解释的,会有各种各样的骚操作哟!
	//嘻嘻
}

结果:
在这里插入图片描述

strncmp

用法:
strcmp(数组1,数组2,长度n)
解释:
strncmp 函数用于比较两个字符串的前 n 个字符。
该函数从第一个字符开始,依次比较每个字符的 ASCII 码大小,发现两个字符不相等或抵达结束符(’\0’)为止,或者前 n 个字符完全一样,也会停止比较。
栗子:

#define _CRT_SECURE_NO_WARNINGS//这个是vs2017特有的,不是 vs2017的小伙伴请忽略
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abc";
	char str2[] = "abcdefg";
	(!strncmp(str1, str2,3)) ? printf("same") : printf("different");
}

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值