关于不使用strlen求字符串长度
在日常生活中,我们有时会遇到这样的题目,不使用strlen函数求字符串长度,关于这种问题,我们其实有很多的方法来解决,首先我们要了解strlen
一、strlen函数简介
strlen()是计算字符串的长度,从字符串的首地址开始,'\0’为止,但不包括’\0‘.
int main() { char arr[] = "abcdef";//在空间中是abcdef\0 int len = strlen(arr); printf("%d\n",len); return 0; }
二、strlen函数的注意事项
1、strlen函数并不是任何情况都可以使用的
strlen函数并不是任何情况都可以使用的,比如下面这种情况
int main() { char arr[] = {'b','i','t'};//在空间中是bit int len = strlen(arr); printf("%d\n",len); return 0; }
在这种情况下,数组里存储的数据没有’\0’,会导致strlen函数出现随机值,这是由于strlen函数是遇到’\0’才能停下来,没有’\0’是停不下来的
2、strlen函数的返回值也是要注意的一个点
首先我们要看的是strlen函数的返回值类型,如下图
strlen函数的返回值类似是size_t 而size_t在c语言函数编译器里是无符号整形,如下图
根据这个,我们会遇到这样的题目
int main() { if (strlen("abd") - strlen("abcdef") > 0) { printf(">\n"); } else { printf("<=\n"); } return 0; }
根据上面,我们可以这样理解这个题目,strlen的返回值是无符号整形,所以不可以出现负数,根据这一点,首先我们得出strlen(“abd”)的结果为3,strlen(“abcdef”)的结果为6,3 - 6 = - 3 而系统中不会出现- 3 所以,这个数会转化成 一个很大的数, 所以这题答案是大于
假如在现实生活中出现这种bug,我们可以通过另一种写法来解决
int main() { if (strlen("abd") > strlen("abcdef") ) { printf(">\n"); } else { printf("<=\n"); } return 0; }
三、不使用strlen求字符串长度
通过前面的这些,我们可以对strlen这个函数有了个简单的了解,现在我们将使用三种方法来解决这个问题
1.计数器方法
size_t my_strlen(const char* str) { size_t count = 0 ; while(*str != '\0') { count++; str++; } return count; }
2.函数递归
size_t my_strlen(const char* str) { if(*str != '\0'){ return 1 + my_strlen(++str); } else return 0; }
3.指针 - 指针
size_t my_strlen(const char* str) { const char* p = str; while(*str != '\0'){ str++; } return str - p; }
总结
通过这篇文章,我们可以对strlen函数有了个简单的了解,关于三种方法解决不使用strlen函数求字符串长度,在现实生活中,我们最容易想到的是第一种方法,并且第一种方法是最适用的