【字符串函数2】

5. strncpy 函数的使用和模拟实现

   选择性拷贝

char * strncpy ( char * destination, const char * source, size_t num );

1.拷贝num个字符从源字符串到目标空间。
2.如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边    追加0   ,直到num个。

测试

int main()
{char arr1[] = "abcd";char arr2[10] = { 0 };strncpy(arr2, arr1, 3);printf("%s", arr2);return 0;
}

结果:

模拟实现:

char* my_strncpy(char* dest, const char* src, size_t num) 
{char* ret = dest;//把初始地址放在retassert(dest && src);//两者不能为空值 while (num--){*(char*) dest = *(char*) src;//  这样也行  * dest = *src;  用char* 是把进行一个字节逐步进行替换dest++;src++;}return ret;
}
int main()
{char arr1[] = "abcd";char arr2[10] = { 0 };my_strncpy(arr2, arr1, 3);printf("%s", arr2);return 0;
}

6.strncat函数的使用和模拟实现    

选择性字符串拼接    拼接后默认添加  ‘\0’

char * strncat ( char * destination, const char * source, size_t num );

1.将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0 字

2.如果source指向的字符串的⻓度小于num的时候,只会将字符串中到\0 的内容追加到destination指向的字符串末尾

测试

int main()
{char arr1[10] = "abcd";char arr2[10] = "efg";strncat(arr1, arr2, 3); //在arr1后拼接arr2printf("%s", arr1);return 0;
}

结果:

模拟实现:

char*  my_strncat(char* dest, const char* src, size_t num)
{assert(dest && src);char* ret = dest;//主要是把dest遍历便  到达dest的字符串的结尾  然后把src增加到dest后面while (*dest){dest++;}while ((*dest++ = *src++) && num--) {}*dest = '\0';return 0;
}
int main()
{char arr1[10] = "abcd";char arr2[10] = "efg";my_strncat(arr1, arr2, 3); //在arr1后拼接arr2printf("%s", arr1);return 0;
}

7.strncmp函数的使用

比较:选择性两字符串的比较

int strncmp ( const char * str1, const char * str2, size_t num );

比较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回

int main()
{char arr1[10] = "abcd";char arr2[10] = "efg";int ret=strncmp(arr1, arr2, 3); //再arr1后拼接arr2printf("%d",ret);return 0;
}

结果:

8.strstr 的使用和模拟实现  

在一个字符串中查找一个字符串

char * strstr ( const char * str1, const char * str2)//函数返回字符串str2在字符串str1中第⼀次出现的位置 之后的内容

测试

int main()    
{char arr1[] = "this is an apple";const char* p = "is";char* ret=strstr(arr1, p);printf("%s", ret);return 0;
}

模拟实现:

char* mystrstr(const char* str1, const char* str2)
{//设置两个固定位置的指针const char* s1 = NULL;const char* s2 = NULL;//设置要查找字符串的位置const char* cur = str1;//首先判断要查找的是否为空if (*str2 == '\0')return (char*)str1;//进行查询while (*cur)    //当*cur!='\0'{s1 = cur;s2 = str2;//满足以下要求   否则无法查询   原字符串和被查找字符串都不能为 '\0'   while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;     //两者遇到 同时增加}//当被查找的查到   '\0'  则查找完成if (*s2 == '\0'){return cur;}cur++;}return NULL;
}
int main()    
{char arr1[] = "this is an apple";const char* p = "is";char* ret= mystrstr(arr1, p);printf("%s", ret);}

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

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

相关文章

MatLab中无穷量和非数值量

文章目录 MatLab中无穷量和非数值量 MatLab中无穷量和非数值量 MatLab中使用Inf和-Inf表示正无穷量与负无穷量。NaN表示非数值量。Inf与-Inf一般由于运算溢出导致超出双精度浮点数类型能够表示数值范围产生。NaN则是由于非正常运算而产生的。如0/0或者Inf/Inf。

语法04 C++ 标准输入语句

标准输入 使用格式:cin >> 输入的意思就是把一个值放到变量里面去,也就是变量的赋值,这个值是由我们自己输入的。 (注意:输入变量前要先定义,输入完之后要按Enter键。) 输入多个变量,与输出类似,…

C++中的转义字符问题

C中的转义字符问题 有些字符不能直接通过键盘输入到程序中。例如,按回车键并不能使字符串包含一个换行符;相反,程序编辑器将把这种键击解释为在源代码中开始新的一行。其他一些字符也无法从键盘输入,因为 C语言赋予了它们特殊的含义。例如&a…

unity数独游戏

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class MainMenuPanel : MonoBehaviour {public Button btnPlay; // 开始按钮public Slider sldDifficulty; // 难度滑动条private void Awake(){/…

springer 在线投稿编译踩坑

springer投稿,在线编译踩坑总结 注意: 有的期刊需要双栏,而预定义的模板中可能为单栏,需要增加iicol选项。 例如: \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…

Matlab的Simulink系统仿真(simulink调用m函数)

这几天要用Simulink做一个小东西,所以在网上现学现卖,加油! 起初的入门是看这篇文章MATLAB 之 Simulink 操作基础和系统仿真模型的建立_matlab仿真模型搭建-CSDN博客 写的很不错 后面我想在simulink中调用m文件 在 Simulink 中调用 MATLA…

远程问诊软件哪款好?选欣九康诊疗系统

近几年国家相继推出了支持发展“互联网医疗”的政策,如今随着相关政策的不断落实推进,市场上涌现出了一大批在线咨询、电子处方和远程问诊的医疗平台,而在面对种类如此繁多的医疗平台究竟选择哪款更好便成了医疗机构非常头疼的事情&#xff0…

【分形技术在神经网络建模中的应用】

分形技术在神经网络建模中的应用 随着大数据时代的到来,神经网络的应用越来越广泛。神经网络的优势在于其能通过学习的方式将任务的模式记忆下来并预测未知的数据。然而,神经网络的主要缺点是需要大量的训练数据和计算资源,这使得它难以解决…

Dubbo 3.x源码(22)—Dubbo服务引用源码(5)服务引用bean的获取以及懒加载原理

基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的服务引入的总体流程,当然真正的服务远程引入、以及配置迁移啥的都还没讲,但是本次我们先不接着讲MigrationRuleListener#onRefer方法,而是先…

数据中心布线管理:预标记线缆与移动扫描技术的融合

随着信息技术的飞速发展,数据中心布线管理面临着前所未有的挑战。传统的布线管理方式已无法满足现代数据中心高效、准确和可靠的需求。在这样一个背景下,预标记线缆与移动扫描技术的结合,为数据中心布线管理带来了革命性的解决方案。 布线管理…

港理工最新综述:基于LLM的text-to-SQL调查(方法实验数据全面梳理)1

【摘要】文本到SQL旨在将自然语言问题转换为可执行的SQL语句,这对用户提问理解、数据库模式理解和SQL生成都是一个长期存在的挑战。传统的文本到SQL系统包括人工工程和深度神经网络。随后,预训练语言模型(PLMs)被开发并用于文本到SQL任务,取得了可喜的成绩。随着现代数据库变得…

Mongodb连接测试程序【Java版】

先导入Maven依赖 <dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver-sync</artifactId><version>4.9.0</version> </dependency>import com.mongodb.MongoClientSettings; import com.mongodb.MongoCred…

B站画质补完计划(3):智能修复让宝藏视频重焕新生

1 老片存在什么画质问题&#xff1f; B站作为一个拥有浓厚人文属性的平台社区&#xff0c;聚集了诸如《雍正王朝》、《三国演义》等经典影视剧集&#xff0c;同时也吸引了大量用户欣赏、品鉴这些人文经典 。但美中不足的是&#xff0c;由于拍摄年代久远、拍摄设备落后、数据多次…

ADB调试命令大全

目录 前言命令大全1.显示当前运行的全部模拟器&#xff1a;adb devices2.启动ADB: adb start-server3.停止ADB: adb kill-server4.安装应用程序&#xff1a; adb install -r [apk文件]5.卸载应用程序&#xff1a; adb uninstall [packagename]6.将手机设备中的文件copy到本地计…

Java常见概念

JavaSE、JavaEE和JavaME是Java技术的三个主要版本&#xff0c;它们各自具有不同的特性和应用场景。以下是关于这三个版本的详细解释&#xff1a; JavaSE (Java Platform, Standard Edition) 定义&#xff1a;JavaSE是Java平台的标准版&#xff0c;也是Java技术的基础版本。特性…

神舟电脑文件误删怎么办?这些恢复方法助你轻松解决

神舟电脑文件误删怎么办&#xff1f;在信息爆炸的时代&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的重要工具。然而&#xff0c;有时我们会因为一些不小心的操作&#xff0c;误删了电脑中的重要文件&#xff0c;尤其是在使用神舟电脑这类高性能设备时&#xff0c;文…

怎么做出用于收集信息的二维码?采集信息的表单二维码制作技巧

现在二维码在日常生活中的应用越来越广泛&#xff0c;经常被用来展示多种内容展示&#xff0c;比如视频、图片、文件、音频、文本等内容&#xff0c;都可以通过生成二维码的方式来为其他人提供相关信息的展示。二维码除了有展示内容的用途外&#xff0c;现在很多人也会生成表单…

短剧分销小程序:影视产业链中的新兴力量

一、引言 在数字化浪潮的推动下&#xff0c;影视产业正迎来一场深刻的变革。短剧分销小程序作为这场变革中的新兴力量&#xff0c;正以其独特的魅力和价值&#xff0c;逐渐在影视产业链中崭露头角。本文将探讨短剧分销小程序在影视产业链中的新兴地位、其带来的变革以及未来的…

【枚举】564. 寻找最近的回文数

本文涉及知识点 枚举 LeetCode564. 寻找最近的回文数 给定一个表示整数的字符串 n &#xff0c;返回与它最近的回文整数&#xff08;不包括自身&#xff09;。如果不止一个&#xff0c;返回较小的那个。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输入: n “123”…

【日记】常去的那家饭馆转让了……(399 字)

正文 晚上吃饭&#xff0c;常去的那家饭馆门市转让了&#xff0c;不做了。sad。 不久之前&#xff0c;临近下班了&#xff0c;我忘了报一个表给副行长&#xff0c;那时候系统已经进不去了&#xff0c;查不了数据。于是我随便转发了一张以前的日报表给他&#xff0c;日期都没改。…