C语言--strcpy/strncpy strcat/strncat strcmp/strncmp strtok strstr详解及模拟实现

一.前言

为了保证文章的质量和长度,小编将会分三篇介绍C语言库函数中常见字符串处理函数,思维导图如下,本文主要讲解思维导图第一部分,希望大家有所收获。

在这里插入图片描述

二.strcpy

(1) 详解

  • 字符串拷贝函数
  • 头文件<string.h>
  • 函数原型:char* strcpy(char*destination, const char*source);
  • strcpy(str1, str2): 将str2(含‘\0’)的字符串拷贝(即复制,在计算机操作中指的是相同的概念)到str1处
  • 返回值类型为char*,返回的是目标空间的起始地址

注意:

  1. 源字符串必须以’\0’结束
  2. strcpy会将源字符串中的’\0’拷贝到目标空间
  3. 目标空间必须足够大,以确保能存放源字符串
  4. 目标空间必须可修改

(2) 模拟实现

法(一)
在这里插入图片描述

法(二)
在这里插入图片描述

三.strncpy

(1) 详解

  • 长度受限制的字符串拷贝函数
  • 头文件<string.h>
  • 函数原型:char* strncpy(char*destination, const char*source, size_t num);

(2) 模拟实现

在这里插入图片描述

四.strcat

(1) 详解

  • 字符串追加(拼接)函数
  • 头文件<string.h>
  • 函数原型:char* strcat(char*destination, const char*source);
  • 返回目标空间的起始地址

注意:

  1. 目标字符串和原字符串必须得有’\0’
  2. 目标空间要足够大
  3. 目标空间可修改
  4. 不要自己给自己追加,会把’\0’覆盖造成死循环

(2) 模拟实现

在这里插入图片描述

五.strncat

(1) 详解

  • 长度受限制的字符串追加(拼接)函数
  • 头文件<string.h>
  • 函数原型:char* strncat(char*destination, const char*source, size_num);
  • 返回目标空间的起始地址
  • 拼接完成后会在末尾加上一个终止的NULL字符(‘\0’),所以相比于strcat可以自己给自己追加

(2) 模拟实现

在这里插入图片描述

六.strcmp

(1) 详解

  • 字符串比较函数
  • 字符串之间的比较相等时不是使用==,而是用strcmp函数
  • 头文件<string.h>
  • 函数原型:int strcmp(const char * str1, const char * str2);
  • 返回值:
  1. str1⼤于str2时,返回⼤于0的数字(VS上默认为1)
  2. str1⼤于str2时,返回0
  3. str1⼤于str2时,返回⼩于0的数字(VS上默认为-1)
  • 字符串比较是一 一比较对应位置的字符,如果彼此相等,则继续执行以下比较,直到字符不同或达到终止null字符

示例如下:
在这里插入图片描述

(2) 模拟实现

在这里插入图片描述

七.strncmp

(1) 详解

  • 长度受限制的字符串比较函数
  • 头文件<string.h>
  • 函数原型:int strcmp(const char * str1, const char * str2, size_t num);

(2) 模拟实现

在这里插入图片描述

八.strtok

(1) 详解

  • 字符串分割函数
  • 功能: strtok函数将找到str中指定分隔符,并把它改成\0,返回起始地址。所以函数会改变被操作的字符串,所以这个字符串一般都是临时拷贝的内容并且可修改
  • 头文件<string.h>
  • 函数原型:char* strtok(char*str, const char*sep);
  1. 其中sep参数指向一个字符串,定义了用作分隔符的字符集合
  2. 第一个参数:

① 不为NULL(空指针)时,函数将找到str中第一个标记(即被改成\0的位置),将保存它在str中的位置
② 为NULL时,函数将在同一个str中被保存的位置开始,查找下一个标记
所以第一个参数除了第一次是原字符串外后面都为NULL

示例如下:
在这里插入图片描述

(2) 模拟实现

  • 通过了解在除第一次以外的函数调用时传递的是空指针NULL,函数还能正常分隔,我们可以知道strtok这个函数有记忆功能,函数内部应该是使用了静态变量(或类似功能的)
  • static修饰函数中的局部变量时,只在第一次调用该函数时进行初始化,后续调用时,该变量使用前一次函数调用完成之后保存的值

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

九.strstr

(1) 详解

  • 字符串包含函数
  • 头文件<string.h>
  • 函数原型:char* strstr(const char* str1, const char* str2);
  • 功能:在字符串str1中查找是否含有字符串str2,如果存在,返回str2在str1中第一次出现的地址;否则返回NULL

(2) 模拟实现

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

十.总结

思维导图剩下的部分将会分两篇持续更新,创作不易,希望大家多多支持,有什么想法欢迎讨论🌹🌹

  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值