问题描述
strlen()的功能是计算字符串的长度,以\0作为字符串结束的标志。
问题分析
要模拟实现计算字符串的长度,可以从以下角度入手:
1.地址,字符串内的字符在内存里为顺序存储,每个字符占一位,我们可以通过使用尾字符的地址减去首字符的地址来实现计算字符串长度;
2.递归,我们面向过程,我们计算字符串长度可以视为一个数数的动作重复进行,直到数到\0为止,我们可以通过一个递归模拟数数的这个动作;
3.计数器,我们面向对象,原理同2,不过使用了一个循环来实现。
代码
//模拟实现strlen
//#include<stdio.h>
//int main()
//{
//模拟实现strlen有三种方法
//1.地址-地址型
//2.递归型
//3.计数器型
//1.地址-地址型
//通过首字符的地址减去最后一个字符的地址来计算字符串长度
//const char* str = "abcdef";
//const char* p1 = 0;
//const char* p2 = 0;
//p1 = str;
//while (*(str++) != '\0')
//{}
//str--;
//p2 = str;
//printf("%d",p2-p1);
// return 0;
//}
//2.递归型
//递归型是通过一个递归,逐个的将字符计算
//#include<stdio.h>
//#include<assert.h>
//
//int my_strlen(const char* str)
//{
// assert(str);
// if ((*str) != '\0')
// return my_strlen(++str) + 1;
// else
// return 0;
//}
//int main()
//{
// const char* str = "abcdef";
// int ret =my_strlen(str);
// printf("%d",ret);
//
// return 0;
//}
3.计数器型
计数器型是逐个数字符串中的字符个数,直到遇到\0
//#include<stdio.h>
//#include<assert.h>
//int my_strlen(const char* str)
//{
// assert(str);
// int i = 0;
// while (*(str++) != '\0')
// {
// i++;
// }
// return i;
//}
//int main()
//{
// const char* str = "abcdef";
// int ret = my_strlen(str);
// printf("%d",ret);
//
// return 0;
//}