strcpy、strncpy、strcat、strncat、strcmp、strstr字符串函数的使用和模拟

strcpy的使用和模拟(作用)

将一个字符串的内容复制到另外一个字符串中代替掉。

strcpy的使用效果

#include <stdio.h>
#include <string.h>int main ()
{char str1[]="Sample string";char str2[40];char str3[40];strcpy (str2,str1);strcpy (str3,"copy successful");printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);return 0;
}

strcpy效果模拟

strcpy函数的使用参数

接下来我们对strcpy函数进行模拟

//strcpy只用于字符串复制,遇到‘\0’时停止,还会复制字符串的结束符'\0';
//所以源字符串必须以’\0’结束,也会将源字符串的’\0’拷贝到目标空间
#include<stdio.h>
#include<assert.h>char*my_strcpy(char*dest,const char*str)
{assert(dest && str);char* ret = dest;while (*dest++ = *str++)//*dest++先使用dest后使用++{;}return ret;
}
int main()
{char arr1[] = "I LOVE YOU";char arr2[] = "he he";my_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

strncpy的使用和模拟

strncpy的使用效果


#include<stdio.h>
#include<string.h>
int main()
{char str1[] = "abcdef";char str2[] = "yes";strncpy(str1, str2, 3);printf("%s", str1);return 0;
}

strncpy效果模拟

strncpy函数的使用参数

接下来我们对strncpy函数进行模拟


#include<stdio.h>
#include<string.h>
char* my_strncpy(char* str1, const char* str2, size_t n)
{if (str1 == NULL || str2 == NULL)//判空return 0;char* start = str1;//记录目标数组首地址while (n && (*str1++ = *str2++))//复制字符串,并考虑n小于或等于被拷贝字符串数目的情况{n--;}if (n)//如果n大于被拷贝字符串数目,须将除被拷贝字符的其他内容用空字符进行补充{while (n){*str1++ = '\0';n--;}}return start;
}
int main()
{char str1[] = "abcdef";char str2[] = "yes";my_strncpy(str1, str2, 2);printf("%s", str1);return 0;
}

strcat的使用和模拟(作用)

将一个字符串中的内容追加到另外一个字符串后面

strcat的使用效果

#include <stdio.h>
#include <string.h>int main ()
{char str[80];strcpy (str,"these ");strcat (str,"strings ");strcat (str,"are ");strcat (str,"concatenated.");puts (str);return 0;
}

strcat效果模拟

strcat函数的使用参数

接下来我们对strcat函数进行模拟

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* arr)
{char* ret = dest;assert(dest && arr);while (*dest != '\0')dest++;while (*dest++ = *arr++){;}return ret;
}
int main()
{char str1[20] = "I LOVE YOU";char str2[] = "abcd";my_strcat(str1, str2);printf("%s\n", str1);return 0;
}

strncat的使用和模拟

strncat的使用效果

#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char str1[20] = "abcdef";char str2[] = "yes";//这里是特别需要注意的,在创建str1的空间的时候,我们需要给str1创建足够大的空间//以此来容纳str1和str2的空间strncat(str1, str2, 4);printf("%s\n", str1);return 0;
}

strncat效果模拟

strncat函数的使用参数

接下来我们对strncat函数进行模拟

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strncat(char*str1, const char*str2, size_t num)
{assert(str1 && str2);char* start = str1;while (*str1){str1++;}while (num--){*str1++ = *str2++;}*str1 = '\0';return start;
}
int main()
{char str1[20] = "abcdef";char str2[] = "yes";my_strncat(str1, str2, 2);printf("%s\n", str1);return 0;
}

strcmp的使用和模拟(作用)

strcmp函数比较两个字符串的大小
大于则返回大于0的数字,小于返回小于0的数字,等于则返回0。

strcmp的使用效果

#include <stdio.h>
#include <string.h>int main ()
{char key[] = "apple";char buffer[80];do {printf ("Guess my favorite fruit? ");fflush (stdout);scanf ("%79s",buffer);} while (strcmp (key,buffer) != 0);puts ("Correct answer!");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[] = "abdcef";int ret = my_strcmp(arr1, arr2);printf("%d ", ret);return 0;

strstr的使用和模拟(作用)

strstr的使用效果

从字符串1中找到字符串2相同的字符串,然后输出字符串1中从字符串2相同位置开始的字符到‘\0’,如果没有就不输出

#include <stdio.h>
#include<string.h>
int main()
{char str[] = "abcdefabcdef";char* p = "fab";char* ret = strstr(str, p);if (ret == NULL){printf("不存在");}else{printf("%s", ret);}return 0;
}

strstr效果模拟

接下来我们对strstr函数进行模拟

#include <stdio.h>
#include<string.h>
#include<assert.h>
char* my_strstr(const char* str, const char* str1)
{assert(str && str1);char* pc = str;const char* s1 = NULL;const char* s2 = NULL;if (*str1 == '\0')return str;while (*pc != '\0'){s1 = pc;s2 = str1;while (*s1 && *s2 && *s1 == *s2){s1++;s2++;}if (*s2 == '\0')return pc;pc++;}return NULL;
}
int main()
{char str[] = "abbbdefabcdef";char* p = "bbd";const char* ret = my_strstr(str, p);printf("%s ", ret);return 0;
}

看到这里的小伙伴,帮忙点个赞,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 学习笔记【1】

此笔记仅适用于有任一编程语言基础&#xff0c;且对面向对象有一定了解者观看 文章目录 数据类型字面量数字类型数据容器字符串列表元组 type()方法数据类型强转 注释单行注释多行注释 输出基本输出连续输出&#xff0c;中间用“,”分隔更复杂的输出格式 变量定义del方法 标识符…

网页实现输入固定前缀,以及打开数量打开固定数量的网页

网页实现输入固定前缀&#xff0c;以及打开数量打开固定数量的网页 废话不多说直接上代码 今天客户说要写一个小需求&#xff1a; 我这边需求是帮我编写一个小程序或者是批处理文件&#xff0c;实现尾数连续的链接打开 例如http://abc1.com,后续依次自动打http://abc2.com,http…

nginx搭建简单负载均衡demo(springboot)

目录 1 安装nignx 1.1 执行 brew install nginx 命令&#xff08;如果没安装brew可百度搜索如何安装brew下载工具。类似linux的yum命令工具&#xff09;。 1.2 安装完成会有如下提示&#xff1a;可以查看nginx的配置文件目录。 1.3 执行 brew services start nginx 命令启动…

9秒爬取庆余年2分集剧情

版本一: 要创建一个Python爬虫程序来爬取指定网站的分集剧情,我们需要使用requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML内容。以下是一个简单的示例,展示了如何爬取你提供的网站的分集剧情,并将每集剧情保存到本地的.txt文件中。 首先,确保你已经安装了req…

if语句知识点

作用 让顺序执行的代码产生分歧。 if 语句 作用&#xff1a;满足条件时&#xff0c;多执行一些代码。 语法&#xff1a; if(bool类型值)//bool类型相关&#xff1a;bool变量&#xff0c;条件运算符表达式&#xff0c;逻辑运算符表达式 {满足条件要执行的代码&#xff0c;写在…

遍历路径,统计每个文件大小

功能&#xff1a;统计&#xff08;参数&#xff09;路径下每个文件大小&#xff0c;记录属主&#xff0c;并且不统计超链接的文件和文件夹。 #!/bin/bash# 定义函数来递归遍历文件夹 function traverse_directory {local directory"$1"# 遍历目录下的文件和子目录fo…

将三个字符串通过strcat连接起来并打印输出

将三个字符串通过strcat连接起来并打印输出 #include <stdio.h> #include <string.h> int main () { char a[10]"I", b[10]" am",c[10]" happy"; strcat(a,b); strcat(a,c); printf("%s",a); printf("\n"); re…

Java | Leetcode Java题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int[] prices) {int n prices.length;int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < n; i) {buy1 Math.max(buy1, -prices[i]);sell1 Math.max(sell1, b…

python程序控制结构

文章目录 一、python程序控制结构介绍二、顺序结构2.1、print()函数2.2、end参数2.3、input()函数 三、选择结构3.1选择结构的用途 四、循环结构4.1循环结构的构造4.1.1、循环结构的三个要素4.1.2、循环结构的一个要求4.1.3、循环结构的一个关系 4.2、循环语句4.2.1、while语句…

zynq PS点灯

摸鱼碎碎念&#xff1a; 需要做ADC采集并在TFT屏幕实时显示波形&#xff08;简易示波器&#xff09; 发现只使用fpga实现比较困难 使用的是zynq&#xff0c;刚好来把arm部分也学到 参考视频 与 教材文档 01_Zynq SoC FPGA的诞生_哔哩哔哩_bilibili (这是俺点开AXI4接口协…

爬虫学习2

中国国家地理网 单张图片爬取 import requests url http://img0.dili360.com/ga/M00/02/AB/wKgBzFQ26i2AWujSAA_-xvEYLbU441.jpg!rw9 headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0…

解锁 JavaScript ES6:函数与对象的高级扩展功能

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; ES5、ES6介绍 文章目录 ES6函数扩展1 默认参数1.1 之前写法1.2 ES6 写法1.3 注意点 2 …

基于VGG16使用图像特征进行迁移学习的时装推荐系统

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

解决Vscode Copilot连不上网问题

这段时间Copilot突然连不上网&#xff0c;修改vscode的proxy固然好使&#xff0c;但是还是不能从根本解决问题&#xff0c;并且会带来诸多问题&#xff0c;比如用vscode打开服务器这个proxy就失效了等等… 今天看到一种方法&#xff0c;很好的解决了我的问题。 直接修改本机的h…

【vue+ts】性能优化,defer优化白屏

代码&#xff1a; import {ref} from vueexport function useDefer(maxCount 100) {const count ref(0)let raqId:any null;function updateFrame() {count.valueif (count.value > maxCount) {return;}raqId requestAnimationFrame(updateFrame)}updateFrame();onUnmo…

【React篇】简述React-Router 的实现原理及工作方式

React Router 路由的基础实现原理分为两种&#xff0c;如果是切换 Hash 的方式&#xff0c;那么依靠浏览器 Hash 变化即可&#xff1b;如果是切换网址中的 Path&#xff0c;就要用到 HTML5 History API 中的 pushState、replaceState 等。在使用这个方式时&#xff0c;还需要在…

如何使用AES128位进行视频解密

要实现AES128位加解密&#xff0c;可以使用JavaScript的crypto-js库。以下是一个简单的示例&#xff1a; HTML代码&#xff1a; <video controlsList"nodownload" controls></video> 首先&#xff0c;需要安装crypto-js库&#xff1a; npm install cr…

数据库管理软件:Navicat Premium 17 中文激活版

Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Clo…

Linux基础指令目录管理001

Linux目录管理是Linux操作系统中的一项基本而重要的任务&#xff0c;涉及到创建、删除、移动、查看和修改目录结构。 操作系统&#xff1a; CentOS Stream 操作命令&#xff1a; mkdir 创建目录 [rootlocalhost ~]# mkdir 秘密 [rootlocalhost ~]# ls -lhrt 总用量 1.2M …

万字解析线控底盘技术

文章出处&#xff1a;汽车学堂Automooc 引言 在当今这个由科技驱动的时代&#xff0c;汽车电动化、智能化已成为汽车行业的热门话题。特斯拉的自动驾驶功能、蔚来的换电模式、以及比亚迪的刀片电池技术&#xff0c;这些创新不仅引领着市场趋势&#xff0c;也推动着消费者对智…