用三种方法实现strlen函数

实现strlen函数有三种方法:

一、计数器的方法

二、递归的方法

三、指针减指针的方法

下面是三种方法的实现:

计数器的方法:

int my_strlen(const char *str)
{
 assert(str);    //对指向字符串指针的断言
 int count = 0;
 while (*str)
 {
  count++;
  str++;
 }
 return count;
}

递归的方法:

int my_strlen(const char *str)
{
 assert(str);
 if (*str == ‘\0‘)
  return 0;
 else
     return 1 + my_strlen(str + 1);
}

指针减指针的方法:

int my_strlen(const char *str)
{
 assert(str);
 const char *p = str;
 while (*p++)
 {
  ;
 }
 return p - str - 1;

//因为*p==‘\0’时,再自加1,返回时指向‘\0‘的下一个空间,导致指针相减时多出一个元素,因此再减1才返回字符串的长度。
}

时间: 2024-08-07 14:05:47

用三种方法实现strlen函数的相关文章

三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)

这里可以简单的修改任意函数的返回地址,可以做到自定义EIP的指向,即可执行当前进程空间的任意指令,这里只是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取任意进程内存,修改任意进程函数执行流程等方法. 废话不多说了,直接上菜: #include <stdio.h> #include <windows.h> /* 打印 main函数的返回地址的值(用途,你懂得!) 所需知识:函数栈帧结构 C调用约定,自右向左压栈 push argv push ar

三种方法实现一个函数,可以左旋字符串中的k个字符

例如:abcd左旋一个字符得到bcda,abcd左旋两个字符得到cdab1.数组下标法 #include<stdio.h> #include<string.h> void left_handed(char *str, int k) { int i; int count = 0; char temp; while (count < k) { temp = str[0]; for (i = 0; i < strlen(str)-1; i++) { str[i] = str[

unity中三种调用其他脚本函数的方法

第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用-- 第二种,GameObject.Find("脚本所在物体名").SendMessage("函数名");  此种方法可以调用public和private类型函数 第三种,GameObject.Find("脚本所在物体名").GetComponent<脚本名>().函数名();此种方法只可以调用public类型函数 unity中三种调用其他脚本函数的

UFT脚本调用外部VBS函数的三种方法

第一种方法:ExecuteFile,利用该函数将外部vbs动态地加载进来,使测试脚本可以调用vbs文件的所有函数,调用语句写在下方,顺序不能颠倒,否则会报错.这个方法适用于QTP任何版本,但有个缺点,代码调试时不能跟踪到外部vbs的函数中,多少有些不便. ExecuteFile File File  String  The absolute or relative path of the file to execute. Example: ExecuteFile "c:\out.vbs"

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG

求字符串长度函数实现的三种方法

/* Date: 10/03/19 12:49 Description: 求字符串长度函数实现的三种方法*/ #include<stdio.h> int strlen1(char *s);int strlen2(char *s);int strlen3(char *s); int main(void) { char str[]="The function to test my length."; printf("The length1 is:%d\n",

写一个函数返回参数二进制中 1 的个数(三种方法)

1.运用了除法,取余方式递推出结构2.运用右移符(>>)运算3.利用算术与(&)运算 三种方法效率越来越高,减少成本 #include<stdio.h> int Number1(int n) { int k; int count=0; while (n > 0) { k = n % 2; n /= 2; if (1 == k) { count++; } } return count; } int Number2(int n) { int count = 0; whil

PHP实现链式操作的三种方法详解

这篇文章主要介绍了PHP实现链式操作的三种方法,结合实例形式分析了php链式操作的相关实现技巧与使用注意事项,需要的朋友可以参考下 本文实例讲述了PHP实现链式操作的三种方法.分享给大家供大家参考,具体如下: 在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是: strlen(trim($str)) 如果要实现类似js中的链式操作,比如像下面这样应该怎么写? $str->trim()->strlen() 下面分别用三种方式来实现: 方法一.使用魔法函数__ca