strlen函数实现源码与解析。
下面这段代码是我随便写的一个测试代码;其中对mystrlen定义其实就是一个strlen函数实现源码,大家自己仔细分析一下。
#include<iostream> using namespace std; int main(int argc, char *argv[]) { int len=0; int mystrlen(const char *StrDest); char *str="hello"; len=mystrlen(str); cout<<len<<endl; return 0; } int mystrlen(const char *StrDest) { int i; i=0; while((*StrDest++)!=" ") { i++; }//这个循环体意思是从字符串第一个字符起计数,只遇到字符串结束标志" ’才停止计数 return i; }
源码一:利用中间变量
int strlen(const char *StrDest) { int i; i=0; while((*StrDest++)!=" ") { i++; }//这个循环体意思是从字符串第一个字符起计数,只遇到字符串结束标志" ’才停止计数 return i; }
源码二:传说某个大名鼎鼎的博士要求面试员写出这样的代码 题目是这样的:
不调用库函数,不使用全局变量和局部变量写出strlen实现。
其实就是要求用递归的方法来写。
int mystrlen(const char *StrDest) { assert(NULL !=StrDest); if(*StrDest == " ") return 0; return (1+mystrlen(++StrDest)); }
递归的过程:当参数传递的过来的地址上内存为" ",那么就返回0,当不是" ’就表明地址上存储的是一个字符,那么计数就是1,然后地址加1调用函数本身。当遇到
" ‘ 结束如此循环。
源码三: 源码二更简洁的方法
int mystrlen(const char*StrDest) { assert(NULL != StrDest); return (" "!= *StrDest)?(1+mystrlen(StrDest+1)):0; }
源码四:
/* strlen: return length of s */ int strlen(char s[]) { int i; while (s[i] != " ") ++i; return i; }
源码5:
利用指针加减法(the c programming language一书中提到的)
/* strlen: return length of string s */ int strlen(char *s) { char *p = s; while (*p != " ") p++; return p - s; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 【C语言】my _strlen函数功能的实现
- 下一篇: strlen高效实现