模拟strlen的三种实现方式

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdio.h>

#include<stdlib.h>

#include<assert.h>

int my_strlen(const char *p)
{
     int count = 0;
     assert(p!=NULL);
     while (*p)
     {
      count++;
      p++;
     }
     return count;
}//遍历字符串

int my_strlen_2(const char *p)
{
     assert(p!=NULL);
     static int count = 0;
     if (*p != 0)
     {
      count++;
      my_strlen_2(++p);
     }
     return count;
}//递归实现

int my_strlen_3(const char *p)
{
     assert(p!=NULL);
     const char *str = p;
     while (*str++);
      return ((int)str-(int)p-1);
}//地址相减实现

int main()
{
     char str[10] = "abcdefg";
     //int ret = my_strlen(str);
     //int ret = my_strlen_2(str);
     //int ret = my_strlen_3(str);
     printf("%d",ret);
     system("pause");
     return 0;
}

				
时间: 2024-08-06 09:02:47

模拟strlen的三种实现方式的相关文章

strlen的三种实现方式

#include <stdio.h> #include <stdlib.h> //实现strlen int my_strlen1(char str[])//数组 { int count = 0; int i = 0; while (str [i] != '\0') { count++; i++; } return count; } int my_strlen2(char *str)//指针 { int i = 0; while (*str ) { i++; str++; } ret

以下三种下载方式有什么不同?如何用python模拟下载器下载?

问题始于一个链接https://i1.pixiv.net/img-zip-...这个链接在浏览器打开,会直接下载一个不完整的zip文件 但是,使用下载器下载却是完整文件 而当我尝试使用python下载的时候 from urllib import request import sys request.urlretrieve('https://i1.pixiv.net/img-zip-ugoira/img/2017/04/05/00/24/41/62259492_ugoira600x600.zip'

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 用 数组下标表示法 表示一个节点 二叉树的主要方法 二叉树的创建 二叉树的添加元素 二叉树的删除元素 二叉树的清空 获得二叉树的高度 获得二叉树的节点数 获得某个节点的父亲节点 二叉树的遍历 先序遍历 中序遍历 后序遍历 遍历小结 总结 树的分类有很多种,但基本都是 二叉树 的衍生,今天来学习下二

jenkins介绍部署及三种构建方式配置

[隐藏] 1前言 1.1jenkins介绍 1.2jenkins好处 1.3我的jenkins实践 1.4jenkins使用前提 2jenkins部署 2.1下面内容介绍 2.2环境介绍 2.3jenkins安装 3插件安装 3.1手动下载jenkins插件 4Jenkins密钥配置 5jenkins触发式构建 6jenkins参数化构建 7jenkins定时构建 8Jenkins用户权限设置 8.1新创建一个用户 8.2用户权限设置 1.前言 1.1.jenkins介绍 jenkins是基于j

试比较三种交换方式

参考链接:http://blog.chinaunix.net/uid-21411227-id-1826932.html三种交换技术及其比较2010-09-22 17:17:57 分类: 系统运维 一.电路交换: “电路交换”(Circuit Switching)又称为“线路交换”,是一种面向连接的服务.两台计算机通过通信子网进行数据电路交换之前,首先要在通信子网中建立一个实际的物理线路连接.最普通的电路交换例子是电话系统.电路交换是根据交换机结构原理实现数据交换的.其主要任务是把要求通信的输入端

分布式锁简单入门以及三种实现方式介绍

前言 很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的东西也是一样的和Java多线程相关的!做好准备,马上开车! 学过Java多线程的应该都知道什么是锁,没学过的也不用担心,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制. 在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁.非公平锁.自旋锁.可重入锁.偏

2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式,所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求. M

分布式锁的三种实现方式

分布式锁三种实现方式: 1. 基于数据库实现分布式锁: 2. 基于缓存(Redis等)实现分布式锁: 3. 基于Zookeeper实现分布式锁: 一, 基于数据库实现分布式锁 1. 悲观锁 利用select … where … for update 排他锁 注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表.有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题. 2. 乐观锁 所谓乐观锁与前边最大区别在

Django框架进阶6 多对多三种创建方式, Ajax, Content-Type前后端传输数据编码格式, Ajax发送文件数据, django内置的序列化功能, Ajax结合sweetalert实现删除二次确认, 批量插入数据, 自定义分页器, ajax结合sweetalert实现删除二次确认

多对多三种创建方式 1.全自动(较为常用) class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') # orm就会自动帮你创建第三张表 class Author(models.Model): name = models.CharField(max_length=32) ''' 好处:第三张表自己创建 不足之处:第三张表无法扩展额外