当前位置: 首页 > news >正文

精品课程网站开发/360网站收录提交入口

精品课程网站开发,360网站收录提交入口,万户网络oa,功能型网站 设计今天也是去学习了一波字符串函数,想着也为了加深记忆,所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…

今天也是去学习了一波字符串函数,想着也为了加深记忆,所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。

目录

strcpy与strncpy

 strcat与strncat

strcmpy

strstr


strcpy与strncpy

在 C 语言中, strcpy 函数用于将一个字符串复制到另一个字符串中,并返回目标字符串的指针。该函数的原型如下:
 
 

char* strcpy(char *dest, const char *src);


 
 
其中, dest 表示目标字符串的指针, src 表示源字符串的指针。 strcpy 函数会将源字符串的内容复制到目标字符串中,并在复制结束后返回目标字符串的指针。
 

以下是一个简单的 strcpy 函数的模拟实现:
 
 

#define _CRT_SECURE_NO_WARNINGS 1
#include<assert.h>
char* My_strcopy(char* dest,const char* src)
{                                                                                                                                                                                                                                                                                                                                                                                                                                                                           char* ret = dest;assert(dest != NULL);assert(src!=NULL);while(*dest++ = *src++);return ret;
}


 
 
在这个模拟实现中,我们首先检查目标字符串和源字符串是否为空指针,如果为空指针则返回空指针。然后,我们使用一个循环将源字符串的内容逐个复制到目标字符串中。最后,返回目标字符串的指针。
 
需要注意的是,这个模拟实现只适用于源字符串和目标字符串的长度较小的情况。在实际使用中,建议使用标准库中的 strcpy 函数,以确保代码的可移植性和正确性。                                                                                                                                                                                                                                                                                                                                                                                                           


这样可能又有人问那我不想全部复制过去,我只想赋值前n个字符串那怎么实现呢?其实在这个库函数也有人创造出来过了,它就是strncpy,它也就比strcpy多一个n。下面是其解析与模拟与解析:

strncpy 函数是 C 语言中的内置函数之一,相较于 strcpy 函数,它使用更加灵活,功能更加强大。strncpy 函数将字符串源的前  num  个字符复制到目标字符串中,返回目标字符串的指针。它的语法形式为:

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


 
需要注意的是, strncpy 函数在复制字符串时,不会在目标字符串的末尾添加空字符  '\0' ,除非源字符串的长度小于  num 。如果源字符串的长度大于等于  num ,则会将源字符串的前  num  个字符复制到目标字符串中。如果源字符串的长度小于  num ,则会将源字符串的所有字符复制到目标字符串中,并在目标字符串的末尾添加  num  减源字符串长度个空字符  '\0' 。
 
下面是一个简单的  strncpy  函数的模拟实现:
 
 

char* My_strncpy(char* dest, const char* src, int num)
{char* tmp = dest;while (num && (*dest++ = *src++))num--;if (num)while (num--)*dest++ = '\0';return tmp;
}
int main()
{int num = 0;char arr1[10] = { '\0' };char arr2[10] = { '\0' };printf("input?the?dest:>\n");gets(arr1);printf("input?the?scr:>\n");gets(arr2);printf("input?the?copy?num:>");scanf("%d", &num);char* ret = My_strncpy(arr1, arr2, num);printf("%s\n", ret);
}

 


 
在这个示例中,我们定义了一个  my_strncpy  函数来模拟  strncpy  函数的行为。在  my_strncpy  函数中,我们使用一个  while  循环来复制源字符串的字符到目标字符串中,直到复制的字符数达到  num  或者遇到源字符串的结束字符  '\0' 。然后,如果  num  不为零,我们使用另一个  while  循环将目标字符串的剩余部分填充为空字符  '\0' 。最后,我们返回目标字符串的指针。
 
在  main  函数中,我们定义了两个长度为10的字符数组  arr1  和  arr2 ,并使用  gets  函数获取用户输入的字符串。然后,我们使用  scanf  函数获取要复制的字符数,并调用  my_strncpy  函数将源字符串的前  num  个字符复制到目标字符串中。最后,我们使用  printf  函数输出复制后的目标字符串。
 


 strcat与strncat

strcat 函数和 strncat 函数都是 C 语言标准库中的字符串操作函数,用于字符串的拼接和拷贝,下面是对它们的解析与模拟实现:
 
1.  strcat 函数:
 
- 函数声明: char *strcat(char *strDestination, const char *strSource) 。
- 函数功能:将源字符串拼接到目标字符串的末尾,并返回拼接后的目标字符串的首地址。
- 注意事项:目标字符串的空间必须足够大,且以 \0 结尾,源字符串必须以 \0 结尾,拼接后的字符串末尾也会自动添加 \0 。

- 模拟实现:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
char * my_strcat(char * dest, const char * src)
{assert(dest);assert(src);char * ret = dest;while (*dest)dest++;while (*dest++ = *src++);return ret;
}
int main()
{char a[20] = "abcd";char b[5] = "efgh";my_strcat(a, b);printf("%s\n", a);system("pause");return 0;
}


 

2.  strncat 函数:
 
- 函数声明: char *strncat(char *strDestination, const char *strSource, size_t count) 。
- 函数功能:将源字符串的前 count 个字符拼接到目标字符串的末尾,并返回拼接后的目标字符串的首地址。
- 注意事项:目标字符串的空间必须足够大,且以 \0 结尾,源字符串必须以 \0 结尾, count 表示需要拼接的字符个数,如果 count 大于源字符串的长度,则拼接有效字符后,在目标字符串末尾添加 \0 ;如果 count 小于源字符串的长度,则拼接有效字符后,在目标字符串末尾添加 \0 。

- 模拟实现:
 

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
char* my_strncat(char* dest, const char* src, size_t count)
{assert(dest);assert(src);char* ret = dest;while (*dest)dest++;while (count--){if (*src)*dest++ = *src++;elsebreak;}*dest = '\0';return ret;
}
int main()
{char a[20] = "abc";char b[5] = "efgh";my_strncat(a, b, 3);printf("%s\n", a);system("pause");return 0;
}

 


 
当然,上述代码只是一种模拟实现,真正的 strcat 和 strncat 函数会对参数进行更严格的检查,并处理各种边界情况,以确保程序的稳定性和安全性。


strcmpy

 strcmp 是一个用于比较字符串大小的函数,其函数原型为 

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

该函数会将两个字符串中的字符一个一个比较直到一方比另一方大或者小,若直到 '\0' 都相等则会返回0。注意其返回值:

第一个大于第二个 返回大于0的数字 
 第一个等于第二个 返回等于0的数字 
 第一个小于第二个 返回小于0的数字
 

以下是一个 strcmp 函数的模拟实现:

 
// 模拟实现 
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()
{int ret = 0;char str1[10] = "dijshdf";char str2[10] = "fuhdsud";ret=My_strcmp(str1, str2);printf("%d\n", ret);return 0;
}


代码解析:首先使用 const 对 str1 和 str2 进行修饰保护,并对 str1 与 str2 进行断言保护,然后使用循环并解引用 str1 和 str2 并判断其是否相等,如果相等则循环继续, str1++ 并且 str2++ 直到遇到 '\0' ,此时返回0;若发现 str1 与 str2 解引用后不相等则返回 *str1-*str2 。


strstr

 strstr 函数的作用是在一个字符串(str1)中查找另一个字符串(str2)的首次出现位置,并返回该位置的指针。其函数原型为

 char*strstr(char*str1, const char*str2)

 

以下是对该函数的解析与模拟实现:
 
1. 函数解析:
 
-  str1 :被查找的目标字符串。
-  str2 :要查找的子字符串。
- 返回值:若 str2 是 str1 的子串,则返回 str2 在 str1 中首次出现的地址;如果 str2 不是 str1 的子串,则返回 NULL 。

 

2. 模拟实现:
 
 
 该函数返回子串在目标串中第一次出现的地址 

char* My_strstr(const char* str1, const char* str2)
{assert(str1 && str2);const char* s1 = str1;const char* s2 = str2;const char* p = str1;while (*p){s1 = p;s2 = str2;while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;}if (*s2 == '\0'){return (char*)p;}p++;}return NULL;
}int main()
{char arr1[] = "hello橘子真甜~";char arr2[] = "hello橘子";char* ret = My_strstr(arr1, arr2);if (ret == NULL){printf("子串不存在\n");}else {printf("字串存在:%s\n", ret);}return 0;
}


 
在上述代码中,首先使用 const 对 str1 和 str2 进行修饰保护,并对 str1 与 str2 进行断言保护,然后使用循环并解引用 str1 和 str2 并判断其是否相等,如果相等则循环继续, str1++ 并且 str2++ 直到遇到 '\0' ,此时返回 p 的地址;若发现 str1 与 str2 解引用后不相等则返回 NULL 。
 

 


文章已到篇尾,请各位多多支持。

相关文章:

解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)

今天也是去学习了一波字符串函数&#xff0c;想着也为了加深记忆&#xff0c;所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…...

node.js后端+小程序前端+mongoDB(增删改查)

前言 今天我对比了以下node.js的express与python的fastAPI&#xff0c;我决定我还是出一期关于node.jsmangoDB小程序的小案例吧。 不是python的fastAPI不好用&#xff0c;因为fastAPI是python较新的技术&#xff0c;我不敢果断发出教学文章&#xff08;这件事情还是留着给pyt…...

thinkphp数据批量提交(群发消息)

<form id="edit-form" class="form-horizontal" role="form" data-toggle<...

大华 DSS 数字监控系统 attachment_getAttList.action SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/attachment_getAttList.action 路由发送特殊构造的数据包,利用报错注入获…...

vue2学习笔记(2/2)

vue2学习笔记&#xff08;1/2&#xff09; vue2学习笔记&#xff08;2/2&#xff09; 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…...

uniapp 之 base64转临时地址播放mp3

需求是&#xff1a;进入页面的时候是先有背景音乐&#xff0c;发送问题请求回答的时候会返回文字和音频&#xff0c;前端要把音频读出来&#xff0c;并且把背景音乐停止&#xff0c;读完音频后再打开背景音乐 一开始用的直接base64直接拼接在地址后 真机放不了 const innerAu…...

【网站项目】038汽车养护管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

倒计时64天

B-小红的因子数_牛客周赛 Round 31 (nowcoder.com) 超时了&#xff08;108.33/125&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e5 5; const int inf 0x3f3f3f3f; #define int long long void solve() {int x;cin>>x;if(x1){cout&…...

003集—三调数据库添加三大类字段——arcgis

在国土管理日常统计工作中经常需要用到三大类数据&#xff08;农用地、建设用地、未利用地&#xff09;&#xff0c;而三调数据库中无三大类字段&#xff0c;因此需要手工录入三大类字段&#xff0c;并根据二级地类代码录入相关三大类名称。本代码可一键录入海量三大类名称统计…...

python基础使用之excel数据处理

当我们需要用python处理 Excel 表格数据时&#xff0c;Python 提供了一个强大的库pandas。pandas 是一个用于数据分析的开源 Python 库&#xff0c;它可以帮助我们轻松地读取、操作和分析 Excel 表格数据。下面通过一个实例&#xff0c;展示 pandas如何 来处理 Excel 表格数据的…...

【算法】【数据结构】算法与数据结构的关系

程序算法数据结构语言工具和环境 但在算法学习过程中&#xff0c;我认识到算法和数据结构是密不可分的&#xff0c;脱离数据结构谈论算法是空架子。 算法&#xff1a;解决问题的步骤和方法。对数据进行操作和处理的方法。 数据结构&#xff1a;用来存储数据的方式。 数据结构和…...

Libvirt 迁移标志详解

可参考&#xff1a;https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainMigrateFlags 在虚拟化环境中&#xff0c;迁移是一项重要的功能&#xff0c;Libvirt 提供了一系列标志&#xff0c;用于控制迁移过程中的不同行为。以下是 virDomainMigrateFlags 枚举的详细…...

【数据分享】1929-2023年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…...

NLP中的嵌入和距离度量

本文将深入研究嵌入、矢量数据库和各种距离度量的概念&#xff0c;并提供示例和演示代码。 NLP中的嵌入 嵌入是连续向量空间中对象、单词或实体的数值表示。在NLP中&#xff0c;词嵌入捕获词之间的语义关系&#xff0c;使算法能够更好地理解文本的上下文和含义。 让我们试着用…...

jsp教务管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教务管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…...

基恩士 KV-8000 PLC通讯简单测试

1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式&#xff0c;包括&#xff1a;OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置&#xff0c;Modbus需要调用功能块。默认支持的是上位链路命令&#xff0c;实际是一条条以回车换行结束的ASCII…...

【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;获取完整论文&#xff01;&#xff01; B 题整体模型构建 1. 潜水器动力系统失效&#xff1a;模型需要考虑潜水器在无推进力情况下的行为。 2. 失去与主船通信&#xff1a;考虑无法从主船接收指令或发送位置信息的情况。…...

apache_exporter安装说明

Apache Exporter 问题描述 需要监控apache服务&#xff0c;部署了apache_exporter&#xff0c;对过程进行一下记录。 源码参见apache_exporter ①下载 https://github.com/Lusitaniae/apache_exporter/releases②解压缩 tar -xzvf apache_exporter-0.7.0.linux-amd64.tar…...

代码随想录算法训练营29期Day42|卡码网46,LeetCode 416

文档讲解&#xff1a;背包问题二维 背包问题一维 分割等和子集 46.整数拆分 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1046 思路&#xff1a; 在一维dp数组中&#xff0c;dp[j]表示&#xff1a;容量为j的背包&#xff0c;所背的物品价值可以最大为d…...

java的excel列行合并模版

1.效果 2.模版 <tableborder"1"cellpadding"0"cellspacing"0"class"tablebor"id"TABLE"><tr align"center" class"bg217"><td style"background-color: #008000; color: #ffffff;p…...

【ES数据可视化】kibana实现数据大屏

目录 1.概述 2.绘制数据大屏 2.1.准备数据 2.2.绘制大屏 3.嵌入项目中 1.概述 再来重新认识一下kibana&#xff1a; Kibana 是一个用于数据可视化和分析的开源工具&#xff0c;是 Elastic Stack&#xff08;以前称为 ELK Stack&#xff09;中的一部分&#xff0c;由 Ela…...

2024 年十大 Vue.js UI 库

Vue.js 是一个流行的 JavaScript 框架&#xff0c;它在前端开发者中越来越受欢迎&#xff0c;以其简单、灵活和易用性而闻名。 Vue.js 如此受欢迎的原因之一是它拥有庞大的 UI 库生态系统。 这些库为开发人员提供了预构建的组件和工具&#xff0c;帮助他们快速高效地构建漂亮…...

使用esp32 cam + SR602人体感应模块制作一个小型的监控

需求&#xff1a; 做一个小型的监控&#xff0c;类似电子猫眼&#xff0c;监测到人之后&#xff0c;取一张图 然后发送到自己的邮箱。 架构&#xff1a; 1.sr602 传感器监测到人 2. esp32 cam 取图 并通过mqtt协议传到远端服务器 3, 服务器利用python 搭建一个mqtt客户端&…...

vim最简单命令学习

安装vim sudo apt install vim在终端随便打开一个文本文件&#xff0c;或者源文件&#xff0c; vim filepath输入该命令后&#xff0c;从终端进入vim编辑器&#xff0c;此时为普通模式(Normal)。 按i键进入编辑模式(Insert)&#xff0c;按Esc键返回普通模式(Normal)。 在编辑…...

论文阅读-通过云特征增强的深度学习预测云工作负载转折点

论文名称&#xff1a;Cloud Workload Turning Points Prediction via Cloud Feature-Enhanced Deep Learning 摘要 云工作负载转折点要么是代表工作负载压力的局部峰值点&#xff0c;要么是代表资源浪费的局部谷值点。预测这些关键点对于向系统管理者发出警告、采取预防措施以…...

Android Studio从零基础到APP上线(3)

第3章 简单控件 本章介绍App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图,容纳视图的常用布局,响应点击的按钮控件,显示图片的图像视图等。然后结合本章所学的知识,演示一个实战项目“简单计算器”的设计与实现。 3.1 文本显示 本节介绍如何在文本视图Tex…...

springboot Feign方式注入注解详解

一、FeignClient注解详解 FeignClient是Spring Cloud中用于声明Feign客户端的注解&#xff0c;它使得编写HTTP客户端变得更简单。通过Feign的自动化配置机制&#xff0c;可以很容易地编写HTTP API客户端。以下是FeignClient的详解&#xff1a; 作用&#xff1a;FeignClient注解…...

自然语言处理(NLP)—— Dialogflow ES聊天机器人

1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务&#xff0c;这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室&#xff0c;你需要在以下网站上创建账号&#xff1a…...

C++俄罗斯方块 -- 菜单展示和选择 -- 方法

short Menu() //选中开始游戏返回1&#xff0c;离开则返回2 {short choice 1;//跟踪用户选中的选项char c; //记录用户按键信息system("cls");SetPos(9, 12); //设置输出坐标&#xff0c;12行9列cout << "┌────────┐";SetPos(9, 13);cou…...

面试150 颠倒二进制位 位运算分治 逻辑右移

Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 &#x1f468;‍&#x1f3eb; 参考题解 >>>&#xff1a;逻辑右移&#xff08;符号位一起移动&#xff0c;高位补零&#xff09; 复杂度 时间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) 空间…...