前言
我本人也在慢慢学习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这本书,这书写的蛮不错的,大家自学的话有兴趣可以看看!