首先字符串函数都是属于库函数<string.h>,所以在使用前我们需要引用它!下面我就不一一说明了。
1.strlen
相信大家对strlen都十分熟悉,它是计算字符串长度大小的
首先我们讲一下字符串
复制代码1char str[] = "abcdef";
像上面我们定义了一个字符串为 abcdef
他在内存中存储的是 abcdef
""就是字符串结束标识符,在访问字符串的时候只访问到""出现的位置,也为我们字符串函数功能的实现提供了帮助
strlen函数的功能原理是什么呢?
它是从这个字符串的起始位置str下标为0也就是a开始判断,上面我们说过字符串结束标识符。
那么思考一下我们有了起始位置和结束标识符这个strlen函数是如何实现的呢?
来听听我的思路:
1.首先strlen是个函数,所以我们要将字符串首元素地址传递过去,也就是strlen的用法---strlen(str);
2.传完地址后用一个指针接收,指针是指向const*型的
3.随后我们解引用这个指针看这个地址中存放的是否是我们的结束标志'',找到''的地址位置。当然我们的一个字符串未知数量的字符,所以我们要用一个while循环,每次指针的位置后移一位
4.当我们找到''的地址的时候,只要与传递字符串的首地址相减,就得到了字符串得长度
但我们的首元素地址已经移到''的位置,所以我们在开始的时候要用另一个指针来保存首元素地址,最后来相减
接下来让我们来实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <stdio.h> #include <assert.h> int my_strlen(const char* pstr) { assert(pstr); //此处为断言 判断pstr是否传递的是空指针 char* p = pstr; while (*pstr != '') { pstr++; } return pstr - p; } int main() { char str[] = "abcdef"; int n = my_strlen(str); printf("%dn", n); return 0; }
2.strcpy
strcpy顾名思义是将字符串拷贝
假如你有字符串1和字符串2,你想将字符串2拷贝到字符串1中,那么就可以使用strcpy
strcpy传递的参数是两个指针,也就是字符串1和字符串2的起始地址
Destination的意思是目的地,Source是来源。
所以
复制代码1strcpy(arr1, arr2);
arr1为被改变的字符串,arr2为被拷贝的字符串。被拷贝的字符串不需要改变,所以在接收参数的时候用const来修饰保护它。
在使用前需要注意!
arr1的长度必须大于arr2的长度,不然的话会造成数组越界访问
strcpy的思路也很简单
就是将arr2的每个值赋值给arr1中包括''
跟strlen的写法差不多,下面让我们来实现它
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16char* my_strcpy(char* dest, const char* src) { assert(src && dest); char* ret = dest; while (*dest++ = *src++) //dest和src的值可以写在while判断条件中,并且每次执行完+1 { } return ret; } int main() { char arr1[20] = { 0 }; char* arr2 = "hello xiaochenxi"; printf("%s", my_strcpy(arr1, arr2)); return 0; }
3.strcmp
字符串比较
但是注意了比较的不是字符串的长度,而是比较字符串中对应位置上的字符大小,如果相同,就比较下一对,直到不同或者都遇到
![]()
strcmp返回的是个int型数 有三种状况 如上图所示
1.字符串1小于字符串2的时候返回小于0的数
2.字符串1等于字符串2的时候返回0
3.字符串1大于字符串2的时候返回大于0的数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29int my_strcmp(const char* dest,const char* src) { assert(dest && src); while (*dest == *src) //当他俩相等的时候,继续访问下一位 { if (*dest == 0) //如果他俩长度一样,且元素一样那么返回0,判断其中一个是否为0就可以 { return 0; } dest++; src++; } if (*dest > *src) { return 1; } else if (*dest < *src) { return -1; } } int main() { char arr1[] = "abcdef"; char arr2[] = "hello"; printf("%d", my_strcmp(arr1, arr2)); return 0; }
最后
以上就是烂漫煎饼最近收集整理的关于详细分析字符串函数(1): strlen,strcpy,strcmp1.strlen2.strcpy3.strcmp的全部内容,更多相关详细分析字符串函数(1):内容请搜索靠谱客的其他文章。
发表评论 取消回复