【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

news/2024/9/24 18:20:54/

1.复制函数--------------strcpy函数

函数使用

char*strcpy(char* destination, const char* source)

  • strcpy函数用于拷贝字符串,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖原字符串内容)。它的参数是两个指针
  • 第一个指针指向目标字符串的首地址,即要拷贝到什么地方。
  • 第二个指针指向来源字符串的首地址,即用什么字符串拷贝。返回值是目标字符串的首地址
    #include<stdio.h>
    #include<string.h>
    int main()
    {//char* p = NULL;//p = "zhangsan";//p是指针变量,可以赋值,将z的地址赋值给p//char name[20] = "xxxxxxxxxx";//name = "zhangsan";//err,name数组名是地址,地址是一个常量值,不能被赋值,name已经被固定死了char name1[20] = "xxxxxxxxxx";char str1[] = "zhang\0san";strcpy(name1, str1);printf("%s\n", name1);char name2[20] = "xxxxxxxxxx";char str2[] = { 'b','i','t' };strcpy(name2, str2);printf("%s\n", name2);//char* p = "abcdef";//p指向常量字符串,存放a的地址,常量字符串是不能修改的//char arr[] = "bit";//strcpy(p, arr);//err//char p[] = "abcdef";//将其放入数组中,使其变成变量可以修改//char arr[] = "bit";//strcpy(p, arr);//rightreturn 0;
    }
    

    模拟实现





    • 复制到时候,函数会将被拷贝字符串的‘/0’一同复制到目标字符串,当字符串没有‘/0‘时,会一直向后查找,直到找到

总结:

  • 源字符串必须以 ‘\0’ 结束。
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可修改。

.模拟实现

  • 进入函数体时先定义一个指针变量保存目标空间的起始位置,便于之后返回。然后将源字符串中的字符一一赋值给目标空间,直到遇到源字符串中的’\0’,将’\0’也赋值给目标空间后结束赋值,并返回目标空间的起始位置。
#include<assert.h>
char* my_strcpy(char* destination, const char* source)
{assert(str != NULL);//断言,若str为NULL,报错,头文件assert.h//或者直接assert(destination && source);char* str = destination;//保存目标空间的起始位置while (*source != '\0')//或者直接while (*source){*destination++ = *source++;}*destination = *source;return str;
}

二.strcat(字符串追加)

char *strcat( char* destination, const char* Source ); 

strcat函数用于追加字符串,即将一个字符串中的内容追加到另一个字符串中。它的参数是两个指针,

  • 第一个指针指向目标字符串的首地址,即要追加到什么地方。
  • 第二个指针指向来源字符串的首地址,即用什么字符串追加。
  • 返回值是目标字符串的首地址
#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = "hello ";char arr2[] = "world";strcat(arr1, "world");printf("%s\n", arr2);char arr3[20] = "hello ";char arr4[] = { 'a','b','c','d','e','f' };strcat(arr3, arr4);printf("%s\n", arr3);return 0;
}

三.strcmp(字符串比较)

1.函数使用

int strcmp(const char* str1,const char* str2)

strcmp函数用于比较两个字符串内容的函数。

它的参数是两个指针

指针分别指向两个待比较字符串的首地址。它的返回值是一个整型数字。
依次比较的是对应字符的ASCII值。

  • 当str1 > str2的时候返回正数。
  • 当str1 == str2的时候返回0。
  • 当str1 < str2的时候返回负数。

//错误的写法
#include<stdio.h>
int main()
{char arr1[] = "zhangsan";char arr2[] = "zhangsan";if (arr1 == arr2)printf("==\n");elseprintf("!=\n");//输出!=return 0;
}

//正确的比较方法
#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "zhangsan";char arr2[] = "zhangsan";int ret = strcmp(arr1, arr2);if (ret < 0)printf("<\n");else if (ret == 0)printf("==\n");//输出==elseprintf(">\n");return 0;
}

  • 第⼀个字符串大于第⼆个字符串,则返回大于0的数字。
  • 第⼀个字符串等于第⼆个字符串,则返回0。
  • 第⼀个字符串小于第⼆个字符串,则返回⼩于0的数字。

那么如何判断两个字符串? 比较两个字符串中对应位置上字符ASCII码值的大小。


2.模拟实现

进入函数体直接比较起始位置的字符的大小。如果相同并且不为’\0’那么继续比较下一对字符的大小;如果相同并且为’\0’那么说明字符串比较完毕,那么直接返回0;如果不同则直接返回str1与str2中对应字符的ASCII值的差值(当str1中对应字符大于str2中的对应字符时返回正值,当str1中对应字符小于str2中的对应字符时返回负值)。

#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);//断言,若str为NULL,报错,头文件assert.hwhile (*str1 == *str2){//遇到都为'\0'的时候,说明字符串相等返回0if (*str1 == '\0')return 0;str1++;str2++;}return (*str1 - *str2);
}


http://www.ppmy.cn/news/1529921.html

相关文章

基于单片机的车载传感器数据处理系统

1总体方案设计 本次新能源汽车车载传感器数据处理系统&#xff0c;其系统总体架构如图2.1所示&#xff0c;采用STM32f103单片机作为控制器&#xff0c;通过DH11传感器实现温湿度检测&#xff1b;通过光敏电阻实现光照检测&#xff1b;同时其检测的信息通过ESP8266 WiFi模块传输…

如何选择适合的编程工具提高工作效率

---  随着科技的发展&#xff0c;编程已经成为各行各业不可或缺的一部分。在忙碌的工作环境中&#xff0c;如何选择合适的编程工具成为了每个开发者提升工作效率的关键。智能的代码编辑器、强大的版本控制工具、还是那些让你事半功倍的自动化脚本&#xff1f;让我们一起探讨&…

【Docker】Docker上安装MySql8和Redis

MySql安装 对于镜像中需要持久化保存的⽂件&#xff0c;需要通过-v挂载到宿主机上&#xff0c;这样这些⽂件才不会随着容器关闭⽽消失。 对于MySQL&#xff0c;需要将他的⽇志⽂件、数据⽂件和配置⽂件挂载到宿主机上。 # 拉取镜像 docker pull mysql:8 # 启动mysql并配置⼯作…

如何从GitHub上Clone项目

GitHub 是全球最大的开源代码托管平台之一&#xff0c;开发者可以在上面分享代码&#xff0c;协作开发&#xff0c;提交贡献。对于程序员来说&#xff0c;从 GitHub 上获取代码并在本地运行和修改是非常重要的一个技能。本文将深入介绍如何从 GitHub 上 clone 项目&#xff0c;…

Rustrover2024.2 正式发布:个人非商用免费,泰裤辣

如果这个世界本身 已经足够荒唐 那究竟什么才能算是疯狂 爱情就是这样 一旦错过了 就会有另一个人代替 我们知道 jetbrains 在今年的早些时候正式为 rust 语言发布了专用的 IDE &#xff0c;也就是 rustrover。如今 rustrover 也正式跻身为 jetbrains IDE 系列的一员猛将。…

c基本知识

c基本知识 1.数据类型相关的关键字 用来存储数据 char字符1字节int 整型4字节short短整型2字节long长整型4/8字节float 单精度4字节double 双精度8字节struct 结构体union 共用体enum 枚举signed 有符号unsigned 无符号void 空类型 2.存储相关关键字 register 寄存器变量s…

可编辑PPT | 能源企业数字化框架、数字化运营及数字化平台建设方案

项目背景及需求理解 首先提出了全球能源互联网的概念&#xff0c;强调了清洁能源和电能替代的重要性&#xff0c;并介绍了德国工业4.0战略以及泛在电力物联网的创新。文档探讨了信息化与工业化的深度融合&#xff0c;以及云计算、大数据、物联网和移动应用等新技术在能源行业的…

Transact-SQL概述(SQL Server 2022)

新书速览|SQL Server 2022从入门到精通&#xff1a;视频教学超值版_sql server 2022 出版社-CSDN博客 《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) SQL Se…