strlen函数的作用:统计字符串中'\0'之前的字符个数。
法一:通过计数器count实现
在自定义函数中,创建一个count变量作为计数器统计字符串中'\0'之前的字符个数,并将count计数器返回给主调函数。
具体实现方法如下:
每当*pc遇到的字符不是'\0'时,计数器count++,直到遇到'\0'停止计数,返回count。
输出结果:
可以看到,输出结果符合预期,成功模拟实现了strlen函数。
规范化模拟实现strlen函数:
在规范化模拟实现strlen函数中,返回值为size_t(无符号整型),因为字符串中字符的个数不可能为负数;assert断言用来判断指针是否为空,如果指针为空,则报错;const用来修饰指针,const在*的左边,代表指针所指向的内容不能通过指针进行修改,且strlen函数的作用是统计字符串中’\0‘之前的字符个数,不需要通过指针修改指针所指向的内容。(若const在*的右边,则指针变量的内容不能修改)。
输出结果:
由于返回值类型是无符号整型,所以用%zd打印出来。
法二:通过指针-指针实现
若指针指向的是同一片空间,则后面元素的指针-前面元素的指针的结果是两个指针之间的元素个数。
具体实现方法如下:
在该方法中,p2指向’\0‘,p1指向首元素,由此可知,指针p2-指针p1可以得到两个指针之间的元素个数,即字符串长度。
输出结果:
可以看到,输出结果符合预期,成功模拟实现了strlen函数。
规范化模拟实现strlen函数:
在规范化模拟实现strlen函数中,返回值为size_t(无符号整型),因为字符串中字符的个数不可能为负数;assert断言用来判断指针是否为空,如果指针为空,则报错;const用来修饰指针,const在*的左边,代表指针所指向的内容不能通过指针进行修改,且strlen函数的作用是统计字符串中’\0‘之前的字符个数,不需要通过指针修改指针所指向的内容。(若const在*的右边,则指针变量的内容不能修改)。
输出结果:
由于返回值类型是无符号整型,所以用%zd打印出来。
法三:通过递归实现
递归的特点是:它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。
递归的主要思考方式在于:把大事化小。
在模拟实现strlen函数中,若是遇到字符'\0',则返回0,否则,返回1+my_strlen(指针+1),且指针会越来越趋近于’\0‘。
具体实现方法如下:
输出结果:
可以看到,输出结果符合预期,成功模拟实现了strlen函数。
规范化模拟实现strlen函数:
在规范化模拟实现strlen函数中,返回值为size_t(无符号整型),因为字符串中字符的个数不可能为负数;assert断言用来判断指针是否为空,如果指针为空,则报错;const用来修饰指针,const在*的左边,代表指针所指向的内容不能通过指针进行修改,且strlen函数的作用是统计字符串中’\0‘之前的字符个数,不需要通过指针修改指针所指向的内容。(若const在*的右边,则指针变量的内容不能修改)。
输出结果:
由于返回值类型是无符号整型,所以用%zd打印出来。
标签:字符,const,函数,个数,strlen,模拟,指针 From: https://blog.csdn.net/weixin_71853810/article/details/140619985