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方法 标识符…

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 命令启动…

if语句知识点

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

将三个字符串通过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…

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;如卷积神经网络、循环神经网络、生成对…

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

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

数据库管理软件: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…

万字解析线控底盘技术

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

Leetcode2028. 找出缺失的观测数据

Every day a Leetcode 题目来源&#xff1a;2028. 找出缺失的观测数据 解法1&#xff1a;模拟 统计当前 m 个元素的总和 curSum sum(rolls)&#xff0c;总共 mn 个元素和为 total (m n) * mean。 排除 2 种情况&#xff1a; total - curSum > 6 * n&#xff1a;n 个…

链表(2)反转链表

题目描述 反转一个单链表。&#xff08;题目来源&#xff09; 思路一 其实&#xff0c;反转一个单向链表&#xff0c;我们可以看成是将链表中的每个结点的指向反向&#xff08;即从后一个结点指向前一个结点&#xff09;。 我们在考虑情况的时候&#xff0c;还是可以先考虑一般…

变种水仙花

变种水仙花 题干要求&#xff1a; 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆分后的乘积之和等于…

Ollama 本地大模型框架

该篇教程主要讲解*Ollama的安装和简单使用* Ollama&#xff1a; 在本地启动并运行大型语言模型。 主要流程目录&#xff1a; 1.安装 2.使用 2.1.下载模型 2.2.简单使用 2.3.中文模型 2.4.中文社区 3.总结 1.安装 创建一个容器 切换”高级视图“ 参考填写 ollama oll…

java家政上门系统源码,App端采用uniapp开发编写,可打包H5 、微信小程序、微信公众号、Android、IOS等。

家政上门系统是一种通过互联网或移动应用平台&#xff0c;为用户提供在线预约、下单、支付和评价家政服务的系统。该系统整合了家政服务资源&#xff0c;使用户能够便捷地找到合适的服务人员&#xff0c;同时也为家政服务人员提供了更多的工作机会。 本套家政上门系统源码&…

Golang | Leetcode Golang题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; func minimumTotal(triangle [][]int) int {n : len(triangle)f : make([]int, n)f[0] triangle[0][0]for i : 1; i < n; i {f[i] f[i - 1] triangle[i][i]for j : i - 1; j > 0; j-- {f[j] min(f[j - 1], f[j]) triangle[i][j]…

旅游行业:解锁收入增长的新策略!

随着科技的飞速发展和人们生活水平的提高&#xff0c;旅游行业已成为全球范围内最具活力和潜力的行业之一。然而&#xff0c;在这个充满机遇与挑战的市场中&#xff0c;如何确保收入的持续增长&#xff0c;成为每一家旅游企业都必须面对的问题。在这个背景下&#xff0c;用友BI…

虚拟现实环境下的远程教育和智能评估系统(七)

在后端代码的基础上&#xff0c;利用vue框架设计前端界面&#xff0c;至此&#xff0c;用户界面基本成型&#xff0c;后续添加其他进阶功能&#xff1b; 另&#xff0c;前后端交互相关&#xff1a; UsersVO.java package com.roncoo.education.user.feign.interfaces.vo;impor…