题目要求

编写一个C语言程序模拟实现strlen函数.

算法

strlen函数功能是计算字符串中字符的个数.(除\0外)

而字符串本身就是一个字符数组,只不过末尾以\0结束.

因此,我们只需遍历除\0之外的所有字符即可.

有三种方法可以解决这个问题.

算法总结

方法一:设置一个整型计数器,遍历字符串.

方法二:通过不断函数自身的递归.

方法三:与方法一类似,设置一个char*变量标记字符串尾部,通过指针相减得到字符长度.

核心代码

//方法一:通过设置整型计数器,模拟实现strlen函数.
int my_strlen1(const char *str){
assert(str);
int count = 0;
while(*str++){
count++;
}
return count;
}
//方法二:通过递归,模拟实现strlen函数
int my_strlen2(const char *str){
assert(str);
if(*str){
return (1+my_strlen2(str+1));
}
return 0;
}
//方法三:通过char*变量,模拟实现strlen函数
int my_strlen3(const char *str){
const char *end = str;
assert(str);
while(*end++){
;
}
return (end-str-1);
}

完整测试代码

/*
*本代码版权归高小调博客所有
*作者:行不更名,坐不改姓的博主高小调
*日期:2015-7-31
*代码功能:三种方式模拟实现strlen函数
*搜集整理:高小调博客-(http://gaoxiaodiao.com)
*/
#include
#include
//方法一:通过设置整型计数器,模拟实现strlen函数.
int my_strlen1(const char *str){
assert(str);
int count = 0;
while(*str++){
count++;
}
return count;
}
//方法二:通过递归,模拟实现strlen函数
int my_strlen2(const char *str){
assert(str);
if(*str){
return (1+my_strlen2(str+1));
}
return 0;
}
//方法三:通过char*变量,模拟实现strlen函数
//(库函数中的strlen函数就是这么干的)
int my_strlen3(const char *str){
const char *end = str;
assert(str);
while(*end++){
;
}
return (end-str-1);
}
int main(){
char str[]="abcdef";
printf("str长度是:%d\n",my_strlen1(str));
printf("str长度是:%d\n",my_strlen2(str));
printf("str长度是:%d\n",my_strlen3(str));
return 0;
}

输出

    本代码用到的函数列表

  1. printf()函数功能、原型、用法和实例
  2. assert()宏功能、原型、用法和实例
  3. strlen()函数功能、原型、用法及实例

最新文章

  1. XACML学习
  2. 分析nuget源码,用nuget + nuget.server实现winform程序的自动更新
  3. 【HTML5】特性
  4. cisco VPN配置
  5. Genymotion中文手册(官方用户手册翻译)
  6. 深入理解计算机系统第二版习题解答CSAPP 2.15
  7. 通过正则表达式获取url中参数
  8. 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
  9. org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
  10. Java代码整理
  11. javascript 作用域链
  12. Materialized View in Oracle - Concepts and Architecture
  13. [WebGL入门]四,渲染准备
  14. huffman压缩解压文件【代码】
  15. workerman例子无法工作
  16. 【转】独立游戏如何对接STEAM SDK
  17. New UWP Community Toolkit - DropShadowPanel
  18. Git 处理tag和branch的命令
  19. define和typedef的区别
  20. POJ 2115

热门文章

  1. static的加载先后顺序
  2. R语言爬虫 rvest包 html_text()-html_nodes() 原理说明
  3. 获取url地址参数值
  4. Docker网络代理设置
  5. js、css3实现图片的放大效果
  6. URLencode 特殊字符 转义 遇上的坑
  7. ldd获得可执行程序的所有库并输出到指定目录
  8. c++针对数据库,文件的操作总结(原始)
  9. HTML5 DragEvent
  10. Struts2之访问路径