首页 > 其他分享 >strlen函数的模拟实现

strlen函数的模拟实现

时间:2024-07-22 22:54:01浏览次数:15  
标签:字符 const 函数 个数 strlen 模拟 指针

strlen函数的作用:统计字符串中'\0'之前的字符个数

法一:通过计数器count实现

在自定义函数中,创建一个count变量作为计数器统计字符串中'\0'之前的字符个数,并将count计数器返回给主调函数。

具体实现方法如下:

每当*pc遇到的字符不是'\0'时,计数器count++,直到遇到'\0'停止计数,返回count。

输出结果:

可以看到,输出结果符合预期,成功模拟实现了strlen函数。

规范化模拟实现strlen函数:

在规范化模拟实现strlen函数中,返回值为size_t(无符号整型),因为字符串中字符的个数不可能为负数;assert断言用来判断指针是否为空,如果指针为空,则报错;const用来修饰指针,const在*的左边,代表指针所指向的内容不能通过指针进行修改,且strlen函数的作用是统计字符串中’\0‘之前的字符个数,不需要通过指针修改指针所指向的内容。(若const在*的右边,则指针变量的内容不能修改)。

输出结果:

由于返回值类型是无符号整型,所以用%zd打印出来。

法二:通过指针-指针实现

若指针指向的是同一片空间,则后面元素的指针-前面元素的指针的结果是两个指针之间的元素个数。

具体实现方法如下:

在该方法中,p2指向’\0‘,p1指向首元素,由此可知,指针p2-指针p1可以得到两个指针之间的元素个数,即字符串长度。

输出结果:

可以看到,输出结果符合预期,成功模拟实现了strlen函数。

规范化模拟实现strlen函数:

在规范化模拟实现strlen函数中,返回值为size_t(无符号整型),因为字符串中字符的个数不可能为负数;assert断言用来判断指针是否为空,如果指针为空,则报错;const用来修饰指针,const在*的左边,代表指针所指向的内容不能通过指针进行修改,且strlen函数的作用是统计字符串中’\0‘之前的字符个数,不需要通过指针修改指针所指向的内容。(若const在*的右边,则指针变量的内容不能修改)。

输出结果:

由于返回值类型是无符号整型,所以用%zd打印出来。

法三:通过递归实现

递归的特点是:它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

递归的主要思考方式在于:把大事化小

在模拟实现strlen函数中,若是遇到字符'\0',则返回0,否则,返回1+my_strlen(指针+1),且指针会越来越趋近于’\0‘

具体实现方法如下:

输出结果:

可以看到,输出结果符合预期,成功模拟实现了strlen函数。

规范化模拟实现strlen函数:

在规范化模拟实现strlen函数中,返回值为size_t(无符号整型),因为字符串中字符的个数不可能为负数;assert断言用来判断指针是否为空,如果指针为空,则报错;const用来修饰指针,const在*的左边,代表指针所指向的内容不能通过指针进行修改,且strlen函数的作用是统计字符串中’\0‘之前的字符个数,不需要通过指针修改指针所指向的内容。(若const在*的右边,则指针变量的内容不能修改)。

输出结果:

由于返回值类型是无符号整型,所以用%zd打印出来。

标签:字符,const,函数,个数,strlen,模拟,指针
From: https://blog.csdn.net/weixin_71853810/article/details/140619985

相关文章

  • 【笔记】生成函数 · 进阶(EGF)
    写在前面本文除了例题@.1P4389付公主的背包使用OGF其她的均为EGF0约定0.1一些形象的表达收缩:指一个式子由比较复杂的形式变简单。本文中大概率就是指一个生成函数用封闭形式来表达;多项式的平移:对于任意一个多项式\(A(x)\),向左平移\(m\)位指\(\left(A(x)-\s......
  • learncpp-20 函数
    20函数20.1函数指针函数和变量一样,也是在内存中被分配了一块地址。因此,函数指针就是一个保存函数的内存地址的变量函数也是有类型的,例如foo()这个函数的类型就是返回整数且不带参数intfoo(){return5;}<<操作符不知道如何输出函数指针(因为有无数种可能的函数指针),因......
  • 2024杭电钉耙2-1003 HDOJ7447 绝对不模拟的简单魔方
    欢迎您来我的网站看这篇题解!Problem有一个魔方可能被拧了不超过三次,同时还弄丢了一个角块上的两个贴纸。现在把这两个贴纸贴回去,请问有没有贴错?只可能拧侧面,不会拧中间层,且每次只能拧\(90^\circ\)。魔方用一个9行12列的字符型矩阵表示:初始魔方的展开图如下图:\(1\leT......
  • learncpp-2 函数和文件
    2函数和文件2.9命名冲突和命名空间两个(或多个)同名函数(或全局变量)被引入到属于同一程序的不同文件中,这将导致链接器错误。两个(或多个)同名函数(或全局变量)被引入到同一个文件中。这将导致编译器错误。不同的作用域(例如命名空间)中可以有相同的标识符只有声明和定义可以出现......
  • 『模拟赛』暑假集训CSP提高模拟5
    Rank痛失Rank2A.简单的序列签到题。读入的时候直接处理。比上一个小就从上一位开始除以二,一直到某一位比上一位大或到了第一位为止。Code:#include<bits/stdc++.h>#definefo(x,y,z)for(registerint(x)=(y);(x)<=(z);(x)++)#definefu(x,y,z)for(registerint(......
  • 数论函数基础
    数论函数基础数论函数是数论中相当重要的一环,我们先来将*一些基本的函数——\(\color{black}\textsf{H}\color{red}\textsf{\_W\_Y}\)*:同“讲”,讲述全文绝大多数内容是对[0]中讲述的粗略抄写和胡乱加工关于加性函数和积性函数的部分,参考[3]1......
  • python函数基础详解
    1.函数的目的在python中使用函数可以减少重复代码,提复用率,目的为了封装一定的功能,比如print封装了打印输出的功能。2.函数的定义是我们在编写程序的时候,临时创建一个新的函数,一个可以重复使用函数的过程,一个简单的函数定义包括,函数名,形参和实参,返回以及调用。3.函数的声明......
  • 附加篇 函数经典模块
    1.open函数使用 在Python中,open()函数用于打开文件,并返回一个文件对象,可以用于读取或写入文件。f=open("./44.函数的参数.py",mode='r',encoding="utf8")#是否可读#print(f.readable(),f.writable())#读取整个文件返回字符串content=f.read()print(cont......
  • 特别篇 函数基础
    1.函数目的 函数的主要目的是提高代码的模块性和重用性。defadd_numbers(a,b):"""Thisfunctiontakestwonumbersasinputandreturnstheirsum."""returna+b#调用函数并打印结果result=add_numbers(3,5)print("Thesumof3and5......
  • 2024/7/22 模拟赛记录
    这次的模拟赛比较简单。150T1:100T2:30T3:0T4:20T1:【题目描述】给定两个字符串a,b,从a中选一段前缀,b中选一段后缀(前后缀都可以为空),并将选出的后缀拼在选出的前缀后面。你需要求出有多少种本质不同的串(可以为空)场上思路:上来直接敲了个扩展kmp,仔细读题后发现这道题和kmp......