当前位置: 首页 > news >正文

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.dtcms.com/a/254842.html

相关文章:

  • 什么是池化
  • 图像特征检测算法ORB
  • C语言标准I/O库详解:文件操作与缓冲区机制
  • vscode设置代码字体
  • 【PX30 Qt 5.15 交叉编译环境搭建完整指南】
  • 动态规划:砝码称重(01背包-闫氏DP分析法)
  • SVN本地使用--管理个人仓库
  • CSS语法中的选择器与属性详解
  • vs code配置go开发环境以及问题解决 could not import cannot find package in GOROOT or GOPATH
  • Linux》》Shell脚本 基本语法
  • Apptrace如何帮我精准追踪移动广告效果?
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • Java数据结构——第 2 章线性表学习笔记
  • 哈夫曼树Python实现
  • 目标检测之YOLOV11谈谈OBB
  • maven项目无远程仓库开发配置(无外网、无maven私服)
  • “本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评
  • angular 图斑点击,列表选中并滚动到中间位置
  • 【目标检测】IOU的概念与Python实例解析
  • SQL分片工具类
  • Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!
  • Softhub软件下载站实战开发(五):分类模块实现
  • C语言学习day17-----位运算
  • LeeCode94二叉树的中序遍历
  • SpringBoot定时监控数据库状态
  • thinkphp8 模型-一对一,一对多,多对多 学习
  • 软件工程(期末复习班)
  • .NET 的配置系统
  • CLion + STM32环境配置,亲测有效(2025.06.19记)
  • 磐基PaaS平台MongoDB组件SSPL许可证风险与合规性分析(上)