下面我来给大家介绍一种字符串函数(strlen),说下如何构建一个函数来模拟它的作用以及这个函数的使用和注意事项 。
1.strlen函数,作用是计算字符串的长度(不包括'\0')以及计算数组的大小,它的原理是寻找'\0',找到了'\0'便停止(若找不到'\0',它将会一直找下去,但最终结果是一个随机值)。
知道了它的作用原理之后,我们可以构建一个新函数,来模拟它的作用。
第一种方法:计数器方法
#include<stdio.h> #include<assert.h> int my_strlen(const char* str) { assert(str != NULL); int count = 0; while (* str != '\0') { count++; str++; } return count; } int main() { int len = my_strlen("abcdef"); printf("%d", len); return 0; }
在这里定义一个cout = 0,如果找到一个,它不是‘\0’,cout便加1,若它为'\0',程序便结束。我在这个程序中,使用了一个assert函数(头文件是#include<assert.h>),使得这个程序更加完美,它一般在函数开始处使用,来检测传入参数的合法性(程序诊断,如果函数assert()括号内的不成立,程序结束),这里很明显str !=NULL 。
第二种方法:递归的方法(即不创建临时变量,来模拟strlen的作用,有的题目,可能会这样问)
#include<stdio.h> #include<assert.h> int my_strlen(char* str) { assert(str != NULL); if (*str != '\0') { return 1 + my_strlen(str + 1); } else return 0; } int main() { char arr[100] = "abc"; int ret = my_strlen(arr); printf("%d\n", ret); return 0; }
这里同样使用了assert函数,来使程序变得更加严谨。
下面我们来直接使用strlen这个函数来看下
注意的是,使用strlen函数,要使用头文件#include<string.h>,在这里可以看到有两个字符数组,arr1和arr2,它们的区别在于arr1这个数组是有'\0'的,而arr2这个数组是没有'\0'的,所以就不能用strlen这么算,如果这么算的话,将会得到一个随机值(1)。
这就是strlen函数的两种模拟方法以及使用,感谢大家的观看。
第一次写博客,如果有写的不好之处还请指出,见谅。