题目要求

编写一个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()函数功能、原型、用法及实例

C语言::模拟实现strlen函数的更多相关文章

  1. C语言strlen函数和sizeof操作符

    字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...

  2. 【C语言】模拟实现memmove函数(考虑内存重叠)

    //模拟实现memmove函数(考虑内存重叠) #include <stdio.h> #include <assert.h> #include <string.h> ...

  3. 【C语言】模拟实现atoi函数

    atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( ...

  4. C语言实现strlen函数的几种方法

    原文地址:http://www.51testing.com/html/72/n-221172.html 传说常见的一个笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen ...

  5. 【C语言】模拟实现strcmp函数

    //模拟实现strcmp函数 //str1>str2,返回1 //str1=str2,返回0 //str1<str2,返回-1 #include <stdio.h> #incl ...

  6. 语言模拟ATM自动取款机系统

    C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...

  7. Ubuntu的多文件编译以及c语言的数组、函数

    闲言少叙,直接切入主题. 一.Linux下的多文件编译(Ubuntu系统). 对于小程序来说,往往一个.c文件就足够了,里面包含了各种主函数和功能函数,以及函数的声明等等.但是这样的弊端主要有两点,一 ...

  8. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  9. 关于c语言模拟c++的多态

    关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...

随机推荐

  1. iOS 创建OpenGL 环境的思考

    关于如何从头开始创建环境,可以参考大神的博文OpenGL ES 3.0 数据可视化 0:Hello world,本文只是补充一些我在实践中的一些思考. CAEAGLLayer If you plan ...

  2. js获取浮动(float)元素的style.left值为空的解决办法

    解决办法: 1.使用行内样式设置元素的top和left值; 2.or直接获取元素的offsetLeft得到相关数值,还不需要parseInt 问题原因: 如果父div的position定义为relat ...

  3. HttpClient请求详解

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

  4. HTTP笔记(一)

    最近在看<图解HTTP>.全书以图解的形式生动形象的讲解了HTTP协议.本文是根据该书整理的笔记,方便以后回顾. HTTP的诞生 HTTP又称超文本传输协议(HTTP,HyperText ...

  5. [学习心得][Introduction to ASP.NET Core 1.0]3-2 ASP.NET Core and MVC Pattern

    We need SMART Models, THIN Controllers, and DUMB Views. VeryBeginning 要使用MVC,要先将MVC服务加到程序中去 Nuget包里添 ...

  6. BZOJ 3479: [Usaco2014 Mar]Watering the Fields(最小生成树)

    这个= =最近刷的都是水题啊QAQ 排除掉不可能的边然后就最小生成树就行了= = CODE: #include<cstdio>#include<iostream>#includ ...

  7. canvas实例:旋转缩放的方块

    首先在页面中创建一个canvas标签: <body> <canvas id="c1" width="500" height="500 ...

  8. 学习ASP.NET MVC(十)——排序

    1 按照价格对书籍进行排序 下面我们通过一个简单的例子学习如何对书籍信息按照价格进行排序. 首先,我们在Controllers\BookController.cs文件中的SearchIndex方法添加 ...

  9. YUM 安装及清理

    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 ...

  10. 每天一个linux命令(47)--scp命令

    scp是secure  copy 的简写,用于在Linux 下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝而不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当 ...