模拟实现字符函数和字符串函数(一)

ops/2024/10/9 15:19:35/

目录

一、模拟实现strlen

二、模拟实现strcpy

三、模拟实现strcmp

四、模拟实现strcat

五、模拟实现strstr

  • 模拟实现strlen
  • 模拟实现strcpy
  • 模拟实现strcmp
  • 模拟实现strcat
  • 模拟实现strstr

一、模拟实现strlen

  • strlen函数是用来求字符串长度的函数

#include <stdio.h>int my_strlen(const char* str)
{char* sp = str;while (*sp){sp++;}return sp-str;
}int main()
{char arr[] = "hello";int ch = my_strlen(arr);printf("%d\n", ch);return 0;
}

二、模拟实现strcpy

  • strcpy是用来实现字符串拷贝的
#include <stdio.h>
#include <assert.h>char* my_strcpy(char* str1, const char* str2)
{assert(str1 && str2);char* cp = str1;while (*str2){*str1 = *str2;str1++;str2++;}return cp;
}int main()
{char arr1[20] = {0};char arr2[] = "hello world";my_strcpy(arr1, arr2);printf("%s\n", arr1);printf("%s\n", arr2);return 0;
}

三、模拟实现strcmp

  • strcmp是用来实现比较两个字符串大小的函数
#include <stdio.h>
#include <assert.h>int my_strcmp(const char* str1, const char* str2)
{assert(str1, str2);while (*str1 == *str2){if (*str1 == '\0'){return 0;}str1++;str2++;}return *str1 - *str2;
}int main()
{char arr1[] = "abcdef";char arr2[] = "abzd";//比较两个字符串大小int ch = my_strcmp(arr1, arr2);if (ch < 0){printf("arr1小于arr2\n");}else if (ch == 0){printf("arr1等于arr2\n");}elseprintf("arr1大于arr2\n");return 0;
}

四、模拟实现strcat

  • strcat是实现在一个字符串后追加一个字符串的函数
#include <stdio.h>char* my_strcat(char* str1, const char* str2)
{char* cp = str1;while (*str1){str1++;}while (*str2){*str1 = *str2;str1++;str2++;}return cp;
}int main()
{char arr1[20] = "hello ";char arr2[] = "world!";my_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

五、模拟实现strstr

  • strstr是用来实现字符串查找的
#include <stdio.h>char* my_strstr(const char* str1, const char* str2)
{char* s1 = str1;char* s2 = str2;char* cp = str1;while (*cp){s1 = cp;s2 = str2;while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;}if (*s2 == '\0'){return cp;}elsecp++;}return NULL;
}int main()
{char arr1[20] = "abbbcdef";char arr2[20] = "bbc";char* ch = my_strstr(arr1, arr2);printf("%s", ch);return 0;
}


http://www.ppmy.cn/ops/123237.html

相关文章

HarmonyOS学习(十四)——数据管理(三) 用户首选项

文章目录 1、概述2、运行机制3、约束条件4、接口说明5、开发步骤5.1、导入模块5.2、获取preference实例5.3、写入数据5.4、读取数据5.5、删除数据5.6、数据持久化5.7、删除指定文件 6、文件代码 1、概述 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用…

Solidity智能合约中的事件和日志

1. Solidity 中的事件和日志概述 1.1 什么是事件&#xff1f; 在 Solidity 中&#xff0c;事件&#xff08;Event&#xff09;是一种允许智能合约与外部世界进行通信的机制。通过触发事件&#xff0c;可以记录合约执行中的关键操作&#xff0c;并将这些操作发送到链上。事件的…

JC系列CAN通信说明

目录 一、CAN协议二、指令格式三、通信接线3.1、一对一通信3.2、组网通信 四、寄存器定义五、指令说明4、读取电源电压5、读取母线电流6、读取实时速度8、读取实时位置10、读取驱动器温度11、读取电机温度12、读取错误信息32、设定电流33、设定速度35、设定绝对位置37、设定相对…

61. 环境贴图.envMap(金属效果)

环境贴图对PBR材质渲染效果影响还是比较大&#xff0c;一般渲染PBR材质的模型&#xff0c;最好设置一个合适的环境贴图。 立方体纹理加载器CubeTextureLoader TextureLoader返回TextureCubeTextureLoader返回CubeTexture 通过前面学习大家知道&#xff0c;通过纹理贴图加载器…

win11/win10/windows下快安装并使用git

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Git 的特点&#xff1f;二、GIT安装方法1.打开GIT官网2.下载git安装程序整个安装过程基本上直接用默认选项就可以 总结 前言 提示&#xff1a;GIT介绍 GI…

【Sceneform-EQR】(手势控制器实现)通过手势事件实现在AR/VR等三维场景中的控制模型旋转、平移与缩放

在Sceneform-EQR中实现旋转平移缩放手势 实现在AR/VR等三维场景&#xff0c;通过手势控制模型节点的缩放、平移和旋转。 实现思路 实现模型旋转 Sceneform-EQR(filament\opengl)中采用右手坐标系。通过欧拉角进行旋转采用Z->Y->X的顺序&#xff0c;在这里&#xff0c;…

微信第三方开放平台接入本地消息事件接口报错问题java.security.InvalidKeyException: Illegal key size

先看报错&#xff1a; java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)at javax.crypto.Cipher.implInit(Cipher.java:805)at javax.crypto.Cipher.chooseProvider(Cipher.java:864)at javax.crypto.Cipher.in…

ArgoCD 与 Amazon EKS 结合实战

在当今快速发展的云原生世界中,持续部署和基础设施即代码已成为不可或缺的实践。ArgoCD 作为一个强大的 Kubernetes 持续部署工具,结合 Amazon EKS (Elastic Kubernetes Service) 这一成熟的托管 Kubernetes 服务,为开发者和运维团队提供了一个强大的组合。本文将深入探讨如…