【strlen】三种方法模拟实现strlen字符串函数
2023-09-11 14:16:59 时间
奇妙的字符串之旅
模拟实现“求有效字符长度”的函数my_strlen
由于主函数都一样,现统一给出
int main()
{
char arr[]="abcde";//5个可见(有效)字符
int len=my_strlen(arr);//len接收返回值
printf("%d\n",len);
return 0;
}
方法一:计数器法
int my_strlen(const char*str)
{
int count=0;
while(*str++)//先运算后++
{
count++;//计数
}
return count;
}
备注:此处的函数返回值按照标准理应该size_t也就是unsigned int
返回值为Int 的优缺点:
优点:不会产生由使用size_t(坑坑坑)引发的问题
缺点:不符合size_t类型的返回值的取值范围(数据类型的取值范围)
运行结果:
const作用:对于不打算修改的变量进行保护,防止被修改。
1.const写给程序员看:自解释,防止后面不小心修改str的值
2.const写给编译器看:一旦修改,立即报错,方便找bug
方法二:函数递归法
递归出口:末尾\0
不了解递归:速戳:递归
int my_strlen(const char* str)
{
if(*str)
{
return 1+my_strlen(str+1);
}
else
{
return 0;
}
}
方法三:指针相减法
元素个数=(指针1-指针2)/sizeof(数据类型)
int my_strlen(const char* str)
{
const char* start = str;//把安全(const)的指针交给安全(const)的指针
while (*str)
{
str++;
}
return str - start;
}
以上三种方法都可得出结果5
备注:如果方法三为了优化代码而优化代码写成了这样是有问题的
解释:
while(str++)中把’\0’放在()内在str==‘\0’的时候,跳出循环前还是会进行从左向右执行最后一次的++操作,然后再跳出;
但是
while(*str)
{
str++;
}
把++放在while的代码块{}内,跳出循环是不会再进行从左向右执行最后一次的++操作,而是直接跳出。
举一个例子验证:
但是这个问题可以优化到正确的答案:只用在return 返回值处再减去1
备注:我的博客中还有其他字符串函数的相关模拟实现,快来围观吧!
关注我一起成长
相关文章
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
- leetCode 45.Jump Game II (跳跃游戏) 解题思路和方法
- Curl操作Elasticsearch的常用方法
- 安装sql2005后,sql2008的远程连接设置方法!!(摘录加补充)
- 56dwr - 购物车案例(调用远程的 Cart 方法)
- Oracle ORA-12899错误的解决方法
- 2022IntelliJ IDEA 创建Servlet最最最新方法IDEA版本2021.2.2(超详细)附加tomcat到idea中。
- springmvc中针对一个controller方法配置两个url请求
- 【C语言】三种方法模拟实现strlen函数
- 创造相对时间的方法
- 使用Python进行页面模拟登录的多种方法汇总
- No.045<软考>《(高项)备考大全》【专项1】《案例分析 - 简介、方法、技巧、理论》
- 《计算机网络:自顶向下方法(原书第6版)》一1.4 分组交换网中的时延、丢包和吞吐量
- 【转载】 一种替代性的基于模拟的搜索方法,即策略梯度搜索
- 浅析SpringSecurity的方法级安全管控
- Java多线程之sleep方法阻塞线程-模拟时钟
- 多行文本溢出显示省略号(...)的方法
- Code First 重复外键(简单方法)
- C#四舍五入的方法
- 数据安全的噩梦 研究人员发现“完美”数据渗漏方法