题目要求

编写一个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. find查找命令

    find # 格式 find [路径] [参数] [表达式] -exec 指令 {} \ ; -{} 代表find找到的文件 -\ 禁止转意 : 表示本行指令结束 # find /sbin -type ...

  2. cura-engine学习(1)

    cura-engine为开源3D打印软件cura的核心引擎代码,详细介绍参看github主页.现在学习的是一个简单版的https://github.com/repetier/CuraEngine,最新 ...

  3. Activiti工作流(一)之基本操作介绍

    工作流的概念: 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或 ...

  4. RHEL 6.0 FTP服务器配置菜鸟配置过程记录

    环境: 虚拟机 RHEL6.0  为了图方便,直接就默认安装了,结果酿成大错,后表~~ 项目:搭建VSFTPD服务器 1.网络ifconfig 配置好,给个IP 2.RPM包或者YUM安装vsftpd ...

  5. C#-MVC开发微信应用(1)--开始使用微信接口

    1.微信账号 要开发使用微信的平台API,就需要到微信的公众平台(https://mp.weixin.qq.com/)去注册,拥有一个服务号或者订阅号,服务号主要面对企业和组织,订阅号主要面向组织和个 ...

  6. v3学院带您一起学习FPGA

    本文为原创,转载请注明! 课程名称:双buffer乒乓操作项目概况:使用FPGA内部ram作为缓冲器,实现对外部数据流的缓存:为了提升数据的传输及处理速度,在此节课中将用到两个ram进行乒乓操作.结构 ...

  7. HTML友情链接代码

    <div align="center">     <table width="980" height="35" borde ...

  8. Asp.Net Core Authentication Middleware And Generate Token

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  9. Delete Node in a Linked List leetcode

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  10. 深入理解ajax系列第四篇——FormData

    前面的话 现代Web应用中频繁使用的一项功能就是表单数据的序列化,XMLHttpRequest 2级为此定义了FormData类型.FormData为序列化表单以及创建与表单格式相同的数据提供了便利. ...