C++实现手写strlen函数

 

 

要实现求字符串长度的函数,核心思路是通过指针或索引遍历字符串,直到遇到字符串结束标志 \0 。以下是两种常见的实现方式:

 

指针遍历版本

 

#include <iostream>

using namespace std;

 

// 指针方式实现strlen

size_t myStrlen(const char* str) {

    if (str == nullptr) {

        return 0; // 处理空指针情况

    }

    

    const char* ptr = str;

    while (*ptr != '\0') {

        ptr++;

    }

    return ptr - str;

}

 

int main() {

    char str[] = "Hello, World!";

    cout << "字符串长度: " << myStrlen(str) << endl;

    return 0;

}

 

 

索引遍历版本

 

#include <iostream>

using namespace std;

 

// 索引方式实现strlen

size_t myStrlen(const char* str) {

    if (str == nullptr) {

        return 0; // 空指针保护

    }

    

    size_t length = 0;

    while (str[length] != '\0') {

        length++;

    }

    return length;

}

 

int main() {

    char str[] = "C++ Programming";

    cout << "字符串长度: " << myStrlen(str) << endl;

    return 0;

}

 

 

实现说明

 

- 核心逻辑:两种实现都通过遍历字符数组,直到遇到 \0 结束标志

- 空指针处理:添加了对 nullptr 的判断,避免程序崩溃

- 返回类型:使用 size_t 类型确保非负整数返回

- 常量指针:参数使用 const char* 防止函数内部修改原字符串

 

这两种实现方式的时间复杂度都是O(n),其中n是字符串的实际长度,空间复杂度为O(1),符合C++标准库中 strlen 函数的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84253.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVPL 函数库介绍和使用

文章目录 NVPL 函数库介绍和使用什么是 NVPLNVPL 的主要组件NVPL 的优势安装 NVPL基本使用示例示例1&#xff1a;使用 NVPL RAND 生成随机数示例2&#xff1a;使用 NVPL FFT 进行快速傅里叶变换 编译 NVPL 程序性能优化建议总结 NVPL 函数库介绍和使用 什么是 NVPL NVPL (NVI…

HTTP相关内容补充

目录 一、URI 和 URL 二、使用 Cookie 的状态管理 三、返回结果的 HTTP状态码 一、URI 和 URL URI &#xff1a;统一资源标识符 URL&#xff1a;统一资源定位符 URI 格式 登录信息&#xff08;认证&#xff09;指定用户名和密码作为从服务器端获取资源时必要的登录信息&a…

MySQL: Invalid use of group function

https://stackoverflow.com/questions/2330840/mysql-invalid-use-of-group-function 出错SQL: 错误原因&#xff1a; 1. 不能在 WHERE 子句中使用聚合&#xff08;或分组&#xff09;函数 2. HAVING 只能筛选分组后的聚合结果或分组字段 # Write your MySQL query statem…

C#财政票查验接口集成-医疗发票查验-非税收入票据查验接口

财政票据是企事业单位、医疗机构、金融机构等组织的重要报销凭证&#xff0c;其真实性、完整性和合规性日益受到重视。现如今&#xff0c;为有效防范虚假票据报销、入账、资金流失等问题的发生&#xff0c;财政票据查验接口&#xff0c;结合财政票据识别接口&#xff0c;旨在为…

浏览器基础及缓存

目录 浏览器概述 主流浏览器&#xff1a;IE、Chrome、Firefox、Safari Chrome Firefox IE Safari 浏览器内核 核心职责 主流浏览器内核 JavaScript引擎 主流的JavaScript引擎 浏览器兼容性 浏览器渲染 渲染引擎的基本流程 DOM和render树构建 html解析 DOM 渲染…

Ubuntu 安装Telnet服务

1. 安装Telnet 客户端 sudo apt-get install telnet 2. 安装Telnet 服务器 &#xff08;这样才能用A电脑的客户端连接B电脑的Telnet服务&#xff09; sudo apt-get install telnetd 3. 这时候Telnet服务器是无法自我启动的&#xff0c;需要网络守护进程服务程序来管理…

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月19日第113弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀4-5个和值&#xff0c;可以做到100-300注左右。 (1)定…

观察者模式 vs 发布订阅模式详解教程

&#x1f31f;观察者模式 vs 发布订阅模式详解教程 收藏 点赞 关注&#xff0c;持续更新高频面试知识库&#xff01;&#x1f680; 一、核心概念&#xff08;总&#xff09; 在软件开发中&#xff0c;观察者模式&#xff08;Observer&#xff09; 和 发布订阅模式&#xff0…

【云馨AI-大模型】MD2Card:从Markdown到知识卡片的完美转变

Markdown的魅力与挑战MD2Card的核心功能使用体验与案例分析总结 在当今这个信息快速传播的时代&#xff0c;内容创作者们一直在寻找更有效的方式来呈现他们的想法和知识。无论是为了个人学习笔记、团队内部的知识分享还是对外的内容发布&#xff0c;一个清晰、美观的展示方式显…

【实战教程】OPEN API 雷池社区版自动拉黑IP

老版本使用雷池社区版的时候都需要在界面操作&#xff0c;但是网络攻击往往都是无规律的&#xff0c;每次都手动操作非常累 前一段时间雷池社区版刚好开放了OPEN API 功能&#xff0c;可以支持大家使用API的方式进行管理了 但是没有相关文档非常难受&#xff0c;一直没有使用…

Hot100——链表专项

目录 相交链表 反转链表 回文链表 环形链表 合并两个有序链表 相交链表 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA nullptr || headB nullptr) {return nullptr;}ListNode *pA headA;ListNode *pB headB;while (pA ! pB) {pA (pA…

Java + Spring Boot 后端防抖切面类AOP代码问题排查分析

需排查分析的防抖切面类 AOP代码&#xff1a; package com.weiyu.aop;import com.weiyu.anno.Debounce; import com.weiyu.utils.DebounceUtil; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotatio…

【FreeRTOS-信号量】

参照正点原子以及以下gitee笔记整理本博客&#xff0c;并将实验结果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、信号量简介 1、什么是信号量 答&#xff1a;信号量是一种解决同步问题的机制&#xff0c;可以实现对共享资源的有序访问。 假设有…

C++中decltype / auto 类型自动推导的深入讲解

一、基本定义 关键字含义出现版本auto根据初始化表达式自动推导类型C11decltype根据表达式的类型推导类型C11 二、二者区别 特性autodecltype(expr)用途声明变量获取表达式类型是否需要初始化是否&#xff08;可用表达式&#xff0c;如函数参数&#xff09;是否推导引用否&am…

Echarts数据可视化开发教程+120套开源数据可视化大屏H5模板

数据可视化跨越了语言、技术和专业的边界&#xff0c;是能够推动实现跨界沟通&#xff0c;实现国际间跨行业的创新的工具。 正如画家用颜料表达自我&#xff0c;作者用文字讲述故事&#xff0c;而统计人员用数字沟通 ...... 同样&#xff0c;数据可视化的核心还是传达信息。 …

华为提取版,低调使用!

大家好呀&#xff01;今天想给大家推荐两款实用软件&#xff0c;一个是视频软件的定制版&#xff0c;另一个是卫星地图软件。 01 引言 之前给大家推荐过某秋音乐的定制版&#xff0c;结果被投诉了。以后大家推荐某秋家的软件要小心&#xff0c;不然很容易违规。 今天推荐的是…

天汇企业的网络设计与实现

天汇企业网络的设计与实现 摘要&#xff1a;互联网技术与通信技术的相互带动作用&#xff0c;使得两者皆呈现多样化的快速发展趋势&#xff0c;5G的时代序幕在已经逐渐开启&#xff0c;由此引发的互联网技术和设备变革必然是各界人士关注的重点&#xff0c;几乎所有与计算机相…

系统架构设计师:安全架构考点解析与例题

一、安全架构概述 安全架构是系统架构设计中确保信息系统安全性的重要组成部分,它定义了保护系统免受安全威胁的策略、技术和方法。安全架构需要贯穿系统设计的全生命周期,从需求分析到部署运维。 安全架构核心目标 ​​保密性​​:防止未授权访问信息​​完整性​​:防止…

计量经济学(复习/自用/未完)

补充&#xff1a; 1、多重共线性的补充 所谓的估计标准误&#xff0c;指的是回归系数的标准误差。例如回归方程&#xff1a; y β0 β1X1 β2X2 e 我们构建的回归方程的系数的计算得出是基于样本的。这意味着&#xff0c;我们每从总体中进行一次抽样&#xff0c;然后计算…

HarmonyOS性能优化——感知流畅优化

在应用开发中&#xff0c;动画可以为用户界面增添生动、流畅的交互效果&#xff0c;提升用户对应用的好感度。然而&#xff0c;滥用动画也会导致应用性能下降&#xff0c;消耗过多的系统资源&#xff0c;甚至影响用户体验。关于感知流畅度请参阅提升动画感知流畅度。 视觉感知…