【C语言学习记录03】字符串函数

前言

我本人也在慢慢学习C语言,看的是C Primer Plus这本书,为了激励自己学习下去,所以会慢慢发分享一些学习心得,也当是记录一下吧,以后也好回顾回顾,本人很菜,高手们不要嘲笑,有问题欢迎指点或者交流,当然,我也可能不会......

正文

strlen函数

这个函数就是求字符串长度的,标点符号、空格都是算在内的,只有字符串结尾的'\0'不会计算在内,这点要与size of进行区别,size of是会将结束标识符'\0'计算在内!

用法如下,不熟悉指针的小伙伴可以看看我前面的文章哦。

char * p = "you are a genius!";

printf("%d",strlen(p));

strcat函数&strncat函数

这个函数是用来拼接两个字符串的,我们经常看到cat貌似都有拼接的意思,比如matlab的cat函数也是有拼接功能的。

strcat(a,b)是把b中字符串接到a后边,最后,a变了,但是b没变,所以这对a分配的大小是有要求的,必须能容纳下b!

char arr[80] = "you are welcome!";
char * p = "you are a genius!";

printf("%s",strcat(arr,p));

或者

char arr[80] = "you are welcome!";
char * p = "you are a genius!";
strcat(arr,p);
printf("%s",arr);

strncat函数与strcat类似,但是它可以做到截取有限个字符接到目标后边,用法如下

char arr[80] = "you are welcome!";
char * p = "you are a genius!";

strncat(arr,p,3);

这个代表,将p中前三个字符接到arr后边;

假设p不足三个字符,那么有多少就接多少到arr后边;

假设p中第二个是'\0',那么就到第二个结束!

strcmp&strncmp函数

当我们想要比对用户输入的字符串与我们所想的字符串是否一致时,我们不能直接用字符串的地址去比较,因为地址的比较是无意义的。所以,我们应该这么去写 

char arr[80] = "you are welcome!";
char * p = "you are a genius!";

if(strcmp(arr,p) != 0)
{
    printf("一样的!");
}
else
{
	printf("不一样的!");
}

关于strcmp的返回值,如果arr > p那么返回1,arr = p返回0,arr < p返回-1,这个大小是根据字符的ASCII码来判断的。

但是有一点大家需要注意的是,strcmp比较的是两个字符串,不是字符,如果arr是个char类型的变量,那么就无法放入strcmp中进行比较

所以strcmp函数也经常可以用于判断是否退出。如下:

#include <stdio.h>
#include <string.h>
#define STOP "quit\n" 
void main()
{
	char ch[100];
	fgets(ch,100,stdin);
	if(strcmp(ch,STOP) == 0)
	{
		puts("Bey Bey!");
	}
	printf("%d",strcmp(ch,STOP));
	return 0;
} 

因为fgets会保留我们最后打的换行符,所以定义STOP时候要加个\n!

strncmp与strcmp也是类似的,只不过加了个限制,就是可以比较前几个字符,这个与前面的strcat与strncat的关系是类似的!

strcpy&strncpy函数

我们想要把一个地址中的内容复制粘贴到另外一个地址时,不能简单的用地址 = 地址来解决,strcpy就很好的解决了这个问题,具体用法如下:

#include <stdio.h>
#include <string.h>
#define STOP "quit\n" 
void main()
{
	char *ch = "you are a genius!";
	char goal[100];
	char *ps; 
	ps = strcpy(goal,ch);
	puts(goal);
	puts(ps);
	return 0;
} 

值得注意的是,goal的空间大小必须大于等于ch中需要复制的字符串大小。为了防止溢出,所以引出了strncpy函数,加了个限制,就是可以只复制前几个字符过去。

因为strncpy拷贝的不是一个完整的字符串,所以拷贝过去后,结尾部分不会有'\0',往往我们需要自己添加一个'\0'

char *ch = "you are a genius!";
char goal[100];
char *ps; 
strncpy(goal,ch,3);
goal[3+1] = '\0';
puts(goal);
return 0;

总结

以上就是一些常用的字符串函数。可以说不难,并且比较实用的哦!搭配条件或者循环,往往能做到很多我们意料之外的功能。

有叙述错误或者不到位的地方欢迎大家批评指正,有问题大家也可以提出,我看到都会回复的。

以上的例子出自C Primer Plus这本书,这书写的蛮不错的,大家自学的话有兴趣可以看看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super_Novaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值