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

C语言:字符函数和字符串函数

往期文章

  1. C语言:初识C语言
  2. C语言:分支语句和循环语句
  3. C语言:函数
  4. C语言:数组
  5. C语言:操作符详解
  6. C语言:指针详解
  7. C语言:结构体
  8. C语言:数据的存储

目录

  • 往期文章
  • 前言
  • 1. 函数介绍
    • 1.1 strlen
    • 1.2 strcpy
    • 1.3 strcat
    • 1.4 strcmp
    • 1.5. strncpy
    • 1.6 strncat
    • 1.7 strncmp
    • 1.8 strstr
    • 1.8 strtok
    • 1.9 strerror
    • 1.10 memcpy
    • 1.11 memmove
    • 1.12 memcmp
  • 2. 库函数的模拟实现
    • 2.1 strcpy的模拟实现
    • 2.2 stract 的模拟实现
    • 2.3 strmcp的模拟实现
    • 2.4 strstr的模拟实现
    • 2.5 memcpy的模拟实现
    • 2.6 memmove的模拟实现
  • 后记

前言

今天来盘一下字符函数和字符串函数。
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数。

1. 函数介绍

1.1 strlen

在这里插入图片描述

注意,strlen的返回值是无符号整数
在这里插入图片描述

1.2 strcpy

在这里插入图片描述

1.3 strcat

在这里插入图片描述

1.4 strcmp

在这里插入图片描述

在这里插入图片描述

1.5. strncpy

在这里插入图片描述

1.6 strncat

在这里插入图片描述

1.7 strncmp

在这里插入图片描述
在这里插入图片描述

1.8 strstr

在这里插入图片描述

1.8 strtok

在这里插入图片描述

1.9 strerror

在这里插入图片描述

1.10 memcpy

在这里插入图片描述

1.11 memmove

在这里插入图片描述

1.12 memcmp

在这里插入图片描述

2. 库函数的模拟实现

2.1 strcpy的模拟实现

#include<stdio.h>
#include<assert.h>void  my_strcpy(char *dest,const char *src)
{assert(dest != NULL);assert(src != NULL);while (*dest++ = *src++){;}*dest = *src;
}
int main()
{char arr1[20] = "********************";char arr2[] = "hello";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

2.2 stract 的模拟实现

#include<stdio.h>
#include<assert.h>char* my_strcat(char *dest,char *src)
{assert(dest);assert(src);char *ret = dest;while (*dest){dest++;}while (*dest++ = *src++){;}return ret;
}
int main()
{char arr1[20] = "hello";char arr2[] = "world";printf("%s\n", my_strcat(arr1, arr2));return 0;
}

2.3 strmcp的模拟实现

#include<stdio.h>
#include<assert.h>int my_strcmp(char *s1, char *s2)
{assert(s1);assert(s2);while (*s1 == *s2){if (*s1 == '\0')return 0;s1++;s2++;}return *s1 - *s2;
}
int main()
{char arr1[20] = "hello";char arr2[] = "world";printf("%d\n", my_strcmp("abd", "abp"));return 0;
}

2.4 strstr的模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strstr(const char *s1, const char *s2)
{assert(s1&&s2);char *cp = s1;while (*cp){char *p1 = cp;char *p2 = s2;while (*p1!='\0'&&*p2!='\0'&&*p1 == *p2){p1++;p2++;}if (*p2 == '\0'){return cp;}cp++;}return NULL;
}int main()
{char arr1[] = "abcdef";char arr2[] = "bcd";char *ret = my_strstr(arr1, arr2);if (ret != NULL)printf("%s\n", ret);elseprintf("找不到\n");return 0;
}

2.5 memcpy的模拟实现

void * memcpy ( void * dst, const void * src, size_t count)
{
void * ret = dst;
assert(dst);
assert(src);
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}

2.6 memmove的模拟实现

void * memmove(void * dst, const void * src, size_t count)
{void * ret = dst;if (dst <= src || (char *)dst >= ((char *)src + count)) {while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}}else {/** Overlapping Buffers* copy from higher addresses to lower addresses*/dst = (char *)dst + count - 1;src = (char *)src + count - 1;while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst - 1;src = (char *)src - 1;}}return(ret);
}

后记

本篇博客就分享到这里啦,希望对大家有所帮助。事实证明,我暑假还没有好好做人。

在这里插入图片描述

http://www.lryc.cn/news/131139.html

相关文章:

  • 基于.Net Core开发的医疗信息LIS系统源码
  • 部署工业物联网可以选择哪些通信方案?
  • flutter-移动端适配
  • MySQL 常用函数
  • 动态路由的实现—正则表达式
  • Android实现超出固定行数折叠文字“查看全文“、“收起全文“
  • Python上楼梯问题:递归解法探究(斐波那契变种)(记忆化递归)
  • AI重新定义音视频生产力“新范式”
  • Jmeter生成可视化的HTML测试报告
  • 5G技术与其对智能城市、物联网和虚拟现实领域的影响
  • leetcode做题笔记88. 合并两个有序数组
  • stm32开关控制led灯泡(附Proteus电路图)
  • win10 wsl ubuntu 更换版本为18.04 apt换国内源Python换国内源;默认root
  • C++ Primer 第1章 开始
  • 【STM32 学习】电源解析(VCC、VDD、VREF+、VBAT)
  • C语言实例_解析GPS源数据
  • LVS+Keepalived
  • uni-app根据经纬度逆解析详细地址
  • 【数据结构】吃透单链表!!!(详细解析~)
  • Linux 安全技术和防火墙
  • Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)
  • 基于深度学习的铁路异物侵限检测算法研究_整体认知感觉欠点意思,但是有一个新的变形卷积-Octave 卷积
  • Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限
  • 2023.8 - java - 变量类型
  • 【Kubernetes】Kubernetes的Pod控制器
  • Ubuntu20.04安装Nvidia显卡驱动教程
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR添加萤石云设备详细操作来啦!
  • AI 绘画Stable Diffusion 研究(十二)SD数字人制作工具SadTlaker插件安装教程
  • 数据结构——链表详解
  • (学习笔记-进程管理)什么是悲观锁、乐观锁?