string意思是字符串,也就是字符串库。
我们这里了解下string库的几个重要函数并且实现.
strlen() 求字符串长度;
strcmp() 字符串的比较
strncpy() 字符串的复制;
首先解释下求字符串的长度:
strlen()的用法是,strlen(字符串),将会返回一个整数.首先重点:只能是字符串。
strlen的实现
int strlen(char *p)
{
int length;
length=0;
while((*p++)!='0')
{
length++;
}
![8b85581c0db2370dd68a0451743ef1f5.png](https://i-blog.csdnimg.cn/blog_migrate/319fadaecacd03cdfff46630531ffed2.jpeg)
分析:
之前的章节中讲解过,char string[5]里面只能放4个字符,因为系统要在最后放置一个'0'作为字符结束标记。
当字符串等于'0'的时候,代表字符串结束。
strcmp() 字符串的比较:
strcmp("字符串1","字符串2");
ANSI C规定字符串1小于字符串2,返回小于0的数.字符串1等于字符串2,则返回0。字符串1大于字符串2的话,则返回大于0。
因为是初步实现,我们选择实现比较简单的
设定这三种返回方式:
字符串1大于字符串2时,返回1;
字符串1等于字符串2时,返回0;
字符串1小于字符串2时,返回-1;
比较的方法是:你可以将“abc”跟"aabcd"理解为34800跟33487,这样子比较,当然是先比较a,然后在比较b,如果不相同,则直接返回,否则直到等于'0'。这里比较是比较ascii码,字母不能比较,但是字母的ascii码是可以比较大小的。
strcmp实现方式:
代码:
int strcmp(char *p1,char *p2)
{
int a=0;
while(*p1==*p2&&*p1)
{
p1++;
p2++;
}
a=*p1-*p2;
if(a < 0)
return -1;
else if(a > 0)
return 1;
return 0;
}
分析:
重点就在于while(判断语句):首先我们判断*p1和*p2是否相等,再去判断*p1是否为'0'。
&&是两边都要相等,如果p1不等于p2或者是p1等于'0'时,while循环结束,这时判断字符的ascii码大小.('0'就是字符0的意思,ascii码为48,而字符最小为65)
strcpy(“字符串1”,”字符串2“) 字符串的复制:
strcpy是将字符串2的内容覆盖到字符串1的内容。比如strcpy("abcde",1234),那么字符串1就变为1234。
值得注意的一点是,字符串不管是指针字符串或者是字符串数组都是传递地址。
如果字符串1或者字符串2为空,则返回NULL。否则会返回字符串1的地址。
代码:
char* strcpy(char *str1,char* str2)
{
char *p=NULL;
if(str1==NULL||str2==NULL)
{
return NULL;
}
p = str1;
while(*str2!='0')*str1++=*str2++;
return p;
}
分析:NULL是空指针的意思。形参是2个指针,然后通过指针对字符串数组或者是字符串指针进行操作。当然了,字符串1不能为常量指针(例如char *c="abcd",这样子是不行的,因为它是指一个常量的地址,而你不能对这个地址里的内容进行更改。)
我这里不仅仅是说教你认识库函数,而是了解这个库函数是怎么去实现的,这是更重要的。
如果想看其他更多详情的话,可以看看点击查看原文,会比较详细,这里只是提及些比较常用的string库函数
现在关注号并且回复c语言资料可获得c语言视频一套及若干资料。寒假期间会开设acm课程
课程会逐渐加深变难,希望可以一同进。
---------------------------------------------------------------------
想了解更多,可以关注公众号"程序员快速修炼