strcpy和strncpy和strcat和strncat和strstr和strtok函数使用及实现
目录
strcpy和strncpy函数的原理及实现
strcpy函数
my_strcpy优化代码
函数返回值的疑惑
strncpy函数
strncpy自定义
完整代码
字符串追加函数 strcat和strncat
strcat函数
讲解和使用
过程解析
strcat代码
strcat无法给自己追加
strncat函数
讲解和使用
过程解析
strncat代码
strncat可以给自己追加
使用并实现strstr与strtok:查找与切割
strstr函数
strstr函数介绍
自定义实现strstr
strtok函数
strtok函数介绍
strtok参数讲解
strtok使用时的注意事项
for循环在strtok使用中的妙处
自定义实现strtok
strcpy和strncpy函数的原理及实现
strcpy函数
strcpy(str1,str2),函数作用是将 把含有'\0'结束符的字符串,比如这里是将str2拷贝到str1中去('\0'也同时拷贝进去),strcpy返回值的类型为char*
在传参的时候传递的是字符串首地址,如:char* p=“hello”是将h的地址传给了p
1、在使用strcpy函数时,要保证目标处有足够的空间存放原字符串(否则无法拷贝进去):
2、目标空间必须可修改(比如数组),否则无法打印:
自定义实现的错误1:未将'\0'拷贝进去
void fail_str(char* arr1, char* arr2)
{while (*arr2 != '\0'){*arr1 = *arr2;arr1++;arr2++;}
}
错因在于:当 *arr2为 ‘\0’,没有进入循环,没有将\0拷贝入arr1,所以无法覆盖后面多余的****
正确代码如下:>
#include <stdio.h>void my_strcpy(char* arr1, const char* arr2)
{while (*arr2 != '\0'){*arr1 = *arr2;arr1++;arr2++;}*arr1 = *arr2;
}int main()
{char str1[] = "***************";char str2[] = "hello world";my_strcpy(str1, str2);printf("%s\n", str1);return 0;
}
代码优化如下:
观察while循环,发现代码可以继续优化:>
当*arr2为'\0'时终止循环,此时已经完成了条件的执行:将\0赋给*arr1
在whiel循环中条件表达式比循环体要多执行一次。
void my_adv_strcpy(char* arr1, const char* arr2)
{while (*arr1++ = *arr2++);
}
由于strcpy返回值类型为char*,故最终完整代码如下:>
my_strcpy优化代码
#include <stdio.h>
char* my_strcpy(char* str1, const char* str2)
{char* ret = str1;while (*str1++ = *str2++);return ret;
}
int main()
{char str1[] = "***************";char str2[] = "hello world";my_strcpy(str1, str2);printf("%s\n", str1);return 0;
}
函数返回值的疑惑
有人会问:“strcpy只是拷贝字符串,为什么还需要返回值?”
如果用void来实现可以吗? 答案是可以的。
返回值为char*的目的是让它能够进行链式访问
比如你想计算复制后的字符串长度,如下:>
int L = strlen(strcpy(str1, str2));
strncpy函数
strncpy和strcpy的区别:>
strcpy() 函数用来复制字符串
而strncpy()只用来复制字符串的前n个字符,所以需要再传递一个参数n
strcpy会向dest中追加src的结束标记'\0'
strncpy()不会向dest追加src的结束标记'\0'
注意:当传递个数大于所传递的字符串长度时,后面传递的都\0
图示1,n小于字符串长度
图示2,n大于字符串长度
strncpy自定义
char* my_strncpy(char* dest, const char* src, int n)
{char* ret = dest;//将dest首地址存入ret中while(n)//循环n次{*dest=*src;dest++;src++;n--;}return ret;//将dest首地址返回
}
完整代码
char* my_strncpy(char* dest, const char* src, int n)
{char* ret = dest;while(n--){*dest++ = *src++;}return ret;
}
int main()
{char a[30] = "abcdddddddd";char b[] = "abcde";printf("%s", strncpy(a, b, 7));
}
字符串追加函数 strcat和strncat
先下结论:strncat比strcat更安全、方便、好用!
strcat函数
讲解和使用
strcat实现字符串的追加
头文件:<string.h>
注意:
1、两个字符串都要以'\0'结束
2、目标空间可修改
3、要保证destination空间足够追加源字符
4、追加之后source不变,destination发生改变
函数用法如下图:>
过程解析
1、返回值为 char* 类型
2、source会覆盖destination结尾的'\0'
3、source的'\0'会被加上去
char* my_strcat(char* str1, const char* str2)
{}
过程的实现:>
简化如下:>
while的条件判断比循环要多一次,所以最后*src为\0时,条件判断中的赋值会进行一次
之后由于条件为0(假),就跳出while
strcat代码
char* my_strcat(char* dest, const char* src)
{char* ret = dest;while (*dest++);dest--;while (*dest++ = *src++);return ret;
}
int main()
{char arr1[30] = "hello ";char arr2[] = "world";printf("追加前arr1:>%s\n", arr1);printf("追加前arr2:>%s\n", arr2);my_strcat(arr1, arr2);printf("追加后arr1:>%s\n", arr1);printf("追加后arr2:>%s\n", arr2);
}
strcat无法给自己追加
由于strcat会从\0开始覆盖,如果写成strcat(arr,arr),会造成死循环,没有尽头
strncat函数
讲解和使用
头文件:<string.h>
辨析两者:
1、strcat 函数的结束条件是src 来到了 '\0';
strncat 函数结束的条件则是所要追加的字符个数为0;
2、strcat函数把源字符串整个地连在目标字符串后面;
strncat可以控制连接的字符个数,用n表示
3、前面讲到strcat无法连接自身。但是strncat可以做到,同时可以控制连接字符的个数。
4、如果n要大于源字符串的长度,则未追加完的字符补充为\0
过程解析
首先确定返回类型和函数参数
char* my_strncat(char* dest, char* src, int n)
类似strcat,先找到\0的位置,进行覆盖追加,直到将n个字符全部加完
char* my_strncat(char* dest, char* src, int n)
{char* ret = dest;while (*dest++);dest--;//找到\0while (n--){*dest++ = *src++;//当src到达\0时,将\0给dest并且返回dest首地址if (*src == '\0'){*dest = *src;return ret;}}//全部追加完之后补充\0*dest = '\0';return ret;
}
简化之后如下:>
char* my_strncat(char* dest, char* src, int n)
{char* ret = dest;while (*dest++) ;dest--;while (n--){//条件执行之后再判断,若此时字符串来到为\0//0==0,条件判断为真,返回retif ((*dest++ = *src++) == 0)return ret;}*dest = '\0';return ret;
}
strncat代码
char* my_strncat(char* dest, char* src, int n)
{char* ret = dest;while (*dest++) ;dest--;while (n--){if ((*dest++ = *src++) == 0)return ret;}*dest = '\0';return ret;
}
int main()
{char arr1[30] = "hello ";char arr2[] = "world";printf("追加前arr1:>%s\n", arr1);printf("追加前arr2:>%s\n", arr2);my_strncat(arr1, arr2,3);printf("追加后arr1:>%s\n", arr1);printf("追加后arr2:>%s\n", arr2);
}
strncat可以给自己追加
使用并实现strstr与strtok:查找与切割
目录
strstr函数
strstr函数介绍
自定义实现strstr
strtok函数
strtok函数介绍
strtok参数讲解
strtok使用时的注意事项
for循环在strtok使用中的妙处
自定义实现strtok
strstr函数
strstr函数介绍
strstr(str1,str2)
作用:查找指定字符串
在字符串str1中查找是否含有字符串str2
如果有,返回str2在str1中第一次出现的地址
否则返回空指针NULL
注意:如果str2是一个空字符串,则返回str1
函数声明:char * strstr (const char * str1, const char * str2)
由于只是进行查找而不改变原来的两个字符串,所以使用const修饰会更加安全
函数使用图示:
当找到第一个完全相同字符串后,返回该位置字符串的地址(并不会截断)
自定义实现strstr
核心:
能找到:>
1、将str1首地址放入空瓶flag中
2、在str1中遍历,直到找到和str2首字符相同的字符,将此地址存入flag
3、找到第一个字符相同之后,str1和str2一起后移,依次判断后面的字符是否都相同
4、如果相同,则说明找到了,将flag中保存的地址进行return
如果找不到呢?
在每一次经过上述的3 步骤之后,让flag往后移。
直到碰到str1中的\0,说明str1遍历完都没找到与str2相同的字符串
这时候返回NULL
#include <stdio.h>
char* my_strstr( const char* str1, const char* str2)
{//断言是否为空指针assert(str1 && str2);const char*s1 = NULL;const char*s2 = NULL;//特殊情况(str2为空字符串)if(str2=='\0')return str1;//用flag记录str1中与str2相同字符的地址const char* flag = str1;//如果遍历str1都没有找到//直到flag为\0时,跳出whilewhile (*flag){s1 = flag;s2 = str2;//寻找相同字符while(*s1&&(*s1 == *s2)){s1++;s2++;}//如果最终遍历s2中来到\0//说明找到了与s2中相同的字符串if (*s2 == '\0')return (char*)flag;//此时将flag地址返回flag++;}return NULL;//找不到就返回空指针
}
int main()
{char arr1[] = "abcdefgabc";char arr2[] = "defg";printf("%s", my_strstr(arr1, arr2));
}
strtok函数
strtok函数介绍
头文件<string.h>
strtok(str,sep)
str表示字符串,sep就是Seperator意思是分割符,这里用来表示多个分割符的集合
作用:分割字符串,一次切割一段
示例如下:>
strtok参数讲解
char *strtok ( char* str , const char * delimiters )
第一个参数是需要切割的字符串。
该字符串中可以包含 0个、1个、多个分割符
第二个参数就是我们指定的切割符集合。
假设想要分别得到Hello,world,!
那么分隔符中就只需要有空格
如果要将以下字符串切割,那么分隔符中需要包含,;。这三个字符
strtok使用时的注意事项
char *strtok ( char* str , const char * delimiters )
1、strtok函数找到str中的一个分割符之后,会将其用 \0 覆盖并且作为结尾,之后再返回一个指向这个\0的指针。
注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容。
char *strtok ( char* str , const char * delimiters )
2、第一次切割时,第一个参数(也就是str)不能是NULL
第一次切割时,函数将找到str中第一个分割符,将它替换为\0
同时strtok函数将保存这 个\0在整个字符串中的位置。
char *strtok ( char* str , const char * delimiters )
3、第二次、第三次...第n次使用strtok函数切割同一个字符串时。
第一个参数为NULL
此时函数将从上一个保存的\0的位置开始往后切割,直到遇到下一个分割符或\0
for循环在strtok使用中的妙处
for(初始化;循环条件的控制;循环条件的改变)
{}
for循环中的初始化只执行一次。
而strtok函数在第一次使用时传递的第一个参数为字符串
之后传递的第一个参数都是NULL
利用for循环这一特性可以更好地使用strtok函数
int main()
{char arr[] = "C语言,Java;C++。hello world";char flag[] = ",;。 ";char* tmp = arr;char* ret = NULL;for (ret = strtok(tmp, flag); ret != NULL; ret = strtok(NULL, flag)){puts(ret);}
}
自定义实现strtok
核心:
第一次使用:
第一个参数为字符串。首先记录字符串首地址,接着将字符串挨个与分割符集合中的每个分割符进行比较,在字符串中找到了一个分割符之后就停止,返回字符串首地址,同时将该分割符置为\0,并且记录这个\0的地址。
第二次使用:
第一个参数为NULL。首先,将上一次查找之后的\0地址传递过来,从该\0的下一个位置开始,记为第二个字符串的首地址,再次遍历分割符之后找到某个分割符。将该分割符置为\0同时记录地址。
...
第N次使用同理。
(重点:函数需要能够记录上一次调用后保存的\0的位置,所以我们使用static用于记录)
代码如下:>
#include <stdio.h>
#include <string.h>char* my_strtok(char* str1, const char* str2)
{static char* flag = NULL;//标记每一个分割符的位置static char* start = NULL;//每一次切割的字符串的首地址static int length = 0;static int count_str1 = NULL;//记下目前遍历过的字符总长度,与str1的长度进行比较int sz_delm = strlen(str2);//分隔符数量,循环遍历所有分隔符
//1、第一次进入时if (str1 != NULL){length = strlen(str1);//保存整个str1的长度start = str1;//str1的首地址存入for (*str1; *str1 != '\0'; str1++){for (int i = 0; i < sz_delm; i++){if (i == 0) count_str1++;//每次查找时给count加1if (*str1 == *(str2 + i)){*str1 = '\0';//将分割符置为\0flag = str1;//将该分割符的地址保存下来return start;}}}}
//2、之后的每一次进入函数时,第一个参数都是空指针else{start = flag + 1;str1 = start;//这里的for循环和第一次一样。for (*str1; *str1 != '\0'; str1++){for (int i = 0; i < sz_delm; i++){if (i == 0) count_str1++;if (*str1 == *(str2 + i)){*str1 = '\0';//将分割符置为\0flag = str1;//记录这一次置0的位置。return start;}}}
//3、找不到分割符就返回NULLif (count_str1 > length)return NULL;//保证每个控路都有返回值return start;}
}int main()
{char arr[50] = "C语言,Java;C++?OK";char* delm = ",;?";char* tmp = NULL;for (tmp = my_strtok(arr, delm); tmp != NULL; tmp = my_strtok(NULL, delm)){puts(tmp);}
}
相关文章:
strcpy和strncpy和strcat和strncat和strstr和strtok函数使用及实现
目录 strcpy和strncpy函数的原理及实现 strcpy函数 my_strcpy优化代码 函数返回值的疑惑 strncpy函数 strncpy自定义 完整代码 字符串追加函数 strcat和strncat strcat函数 讲解和使用 过程解析 strcat代码 strcat无法给自己追加 strncat函数 讲解和使用 过程解…...
前端开发使用若依的优势
若依(RuoYi)前端框架是基于主流技术栈(如Vue.js或React)构建的企业级前端解决方案,其优势主要体现在以下几个方面: 1. 开箱即用的企业级功能 权限管理:集成动态路由、按钮级权限控制(RBAC模型),适配后台权限系统,无需重复开发。多标签页:支持类似浏览器的多标签页操…...
网络空间安全(44)Web实战篇
一、Web应用程序安全防护 输入验证 严格验证用户输入:对所有用户输入的数据进行合法性检查,防止恶意用户通过输入恶意数据攻击应用程序。验证应包括对表单数据、URL参数、Cookie等进行检查,确保输入的数据符合预期格式和范围。使用安全的编码…...
python列表常用方法大全
列表(List)是 Python 中最常用的数据结构之一,它是一个有序、可变的集合,可以存储任意类型的元素。以下是列表的定义及常见用法,包括拼接、增加数据、插入数据、删除数据、计算差值、相加、清空等操作,与字…...
Warm-Flow过去、现在和未来都不会有商业版
Warm-Flow过去、现在和未来都不会有商业版 Warm-Flow从24年2月加入Dromara开源社区,也正是由于加入他,Warm-Flow才等到更多人的关注和帮助。 同时吸引了不少贡献者,有的也成为了Warm-Flow的成员。 因此为了回馈大家,也是为了War…...
3. 实战(一):Spring AI Trae ,助力开发微信小程序
1、前言 前面介绍了Spring boot快速集成Spring AI实现简单的Chat聊天模式。今天立马来实战一番,通过Trae这个火爆全网的工具,来写一个微信小程序。照理说,我们只是极少量的编码应该就可以完成这项工作。开撸~ 2、需求描述 微信小程序实现一…...
3.23周赛补题
感觉还要多练,有的题思路不难,但是赛时就没思路。 A const int N110,M1e410; int dp[N][M]; void solve(){int n,m;cin>>n>>m;vector<int>a(n1);forr(i,1,n){cin>>a[i];}dp[0][0]1;//没钱 没菜 就是一种情况forr(i,1,n){refor…...
libpng-1.6.47-windows编译
本文操作按照《c&c开源库编译指南》中内容规范编写,编译环境配置、工具下载、目录规划,及更多其他开源库编译方法请参考该文章。 c&c开源库编译指南:https://blog.csdn.net/binary0006/article/details/144086155 本文章中的源代码已…...
RabbitMQ高级特性--重试特性
目录 1.重试配置 2.配置交换机&队列 3.发送消息 4.消费消息 5. 运行程序观察结果 6. 手动确认 注意: 在消息传递过程中, 可能会遇到各种问题, 如网络故障, 服务不可用, 资源不足等, 这些问题可能导致消息处理失败. 为了解决这些问题, RabbitMQ 提供了重试机制, …...
热门索尼S-Log3电影感氛围旅拍LUTS调色预设 Christian Mate Grab - Sony S-Log3 Cinematic LUTs
热门索尼S-Log3电影感氛围旅拍LUTS调色预设 Christian Mate Grab – Sony S-Log3 Cinematic LUTs 我们最好的 Film Look S-Log3 LUT 的集合,适用于索尼无反光镜相机。无论您是在户外、室内、风景还是旅行电影中拍摄,这些 LUT 都经过优化,可为…...
基础认证-单选题(一)
单选题 1、下列关于request方法和requestlnStream方法说法错误的是(C) A 都支持取消订阅响应事件 B 都支持订阅HTTP响应头事件 C 都支持HttpResponse返回值类型 D 都支持传入URL地址和相关配置项 2、如需修改Text组件文本的透明度可通过以下哪个属性方法进行修改 (C) A dec…...
C++ 变量类型
C 变量类型 在C编程语言中,变量是存储数据的基本单元。变量类型决定了变量的存储方式和所占内存大小。了解C中的变量类型对于编写高效、可维护的代码至关重要。本文将详细介绍C中的各种变量类型,包括基本类型、复合类型和用户定义类型。 基本类型 C提…...
智能粉尘监测解决方案|守护工业安全,杜绝爆炸隐患
在厂房轰鸣的生产线上,一粒微小粉尘的聚集可能成为一场灾难的导火索。如何实现粉尘浓度的精准监控与快速响应?我们为您打造了一套"感知-预警-处置"全闭环的智能安全方案! 行业痛点:粉尘管理的生死线 在金属加工、化工…...
美观快速的react 的admin框架
系统特色: - 🎨 精心设计的UI主题系统,提供优雅的配色方案和视觉体验 - 📦 丰富完整的组件库,包含大量开箱即用的高质量组件 - 🔨 详尽的组件使用示例,降低开发者的学习成本 - 🚀…...
CentOS 7 挂载与卸载文件系统笔记
挂载文件系统 挂载的基本概念 挂载是将存储设备(如硬盘分区、U 盘、光盘等)连接到 Linux 文件系统的特定目录(挂载点),使得系统能够访问存储设备上的数据。 查看已挂载的文件系统 命令:mount 或 df -h mo…...
UE5学习笔记 FPS游戏制作28 显式玩家子弹数
文章目录 添加变量修改ShootOnce方法,设计时减少子弹,没有子弹不能开枪在UI上显示 添加变量 在Gun类中添加BulletNum和ClipSize两个参数 BulletNum是当前还有多少子弹,ClipSize是一个弹匣多少子弹 Rifle的ClipSzie设置为30,Laun…...
VRRP交换机三层架构综合实验
题目要求: 1,内网Ip地址使用172.16.0.0/16分配 说明可以划分多个子网,图中有2个VLAN,可以根据VLAN划分 2,sw1和SW2之间互为备份 互为备份通常通过VRRP(虚拟路由冗余协议)来实现。VRRP会在两个…...
QSettings用法实战(相机配置文件的写入和读取)
很多情况,在做项目开发的时候,将参数独立出来是比较好的方法 例如:相机的曝光次数、曝光时长等参数,独立成ini文件,用户可以在外面修改即可生效,无需在动代码重新编译等工作 QSettings便可以实现该功能 内…...
洛谷题单1-P1001 A+B Problem-python-流程图重构
题目描述 输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤109)。 输入格式 两个以空格分开的整数。 输出格式 一个整数。 输入输出样例 输入 20 30输出 50方式-print class Solution:staticmethoddef oi_input():"""从…...
分布式系统
一、分布式系统概述 1.1 为什么需要分布式系统? 核心驱动力: 性能需求:单机性能受物理限制(CPU/内存/IO),分布式系统通过并行计算突破瓶颈可扩展性:水平扩展(增加节点&#x…...
前端开发学习路线完整指南
前端开发学习路线完整指南 前端开发是一个不断发展的领域,涉及多个技术栈。本文将为你提供一条系统的前端学习路线,帮助你从零基础到熟练掌握前端开发技能。 1. 前置知识 在学习前端之前,了解一些基础知识会对你的学习过程有很大帮助。 计…...
Sa-Token核心功能解剖二( Session会话、 持久层Redis扩展 、全局侦听器 、全局过滤器、多账号体系认证、单点登录)
文章目录 概要功能结构图5.Session会话6.持久层扩展7.全局侦听器8.全局过滤器9.多账号体系认证10.单点登录 概要 Sa-Token核心功能解剖(二),主要有: Session会话 —— 全端共享Session,单端独享Session,自定义Session,方便的存取…...
C++搜索
功能扩展说明: 图类封装:将图数据结构封装为类,提高代码复用性 最短路径查找:基于BFS实现未加权图的最短路径查找 路径重构:通过parent数组回溯构建完整路径 异常处理:当路径不存在时返回空向量 复杂度分析…...
NC,GFS、ICON 数据气象信息可视化--降雨量的实现
随着气象数据的快速发展和应用,气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据,还能为公众提供直观的天气预报信息。今天,我们将从降雨量的可视化出发,带大家一起了解如何实现气象数据的可视化…...
Android SystemUI深度定制实战:QSPanel下拉状态栏动态日期显示全解析
一、需求背景与实现思路 在Android系统定制化开发中,SystemUI的下拉状态栏(Quick Settings Panel,QSPanel)是用户高频交互的核心模块。近期某产品需求提出:在下拉展开状态栏时,需在QSPanel的顶部区域动态显…...
Linux 部署 rocketmq centos7
mq部署方案 1、rocketmq 顺序消费记录 一个master ,一个 brocker ,多个group ,多个topic,采用集群消费模式。 注意 一个group 对应一个 topic。 生产者 和 消费者 可以有多个,但是 主题和分组 都是一对一的。这样保证…...
02_MySQL安装及配置
文章目录 一、下载二、安装及配置2.1、选择安装类型2.2、检查需要的依赖2.3、安装2.4、配置2.4.1、配置类型和网络2.4.2、配置账户和角色2.4.3、配置Windows服务2.4.4、让配置生效 2.5、验证是否安装成功 三、卸载3.1、运行MySQL安装工具3.2、卸载及清理3.3、卸载之后的检查工作…...
银行的压力测试如何进行?
为什么要进行压力风险测试? 压力风险测试的最终目的是测试银行在极度恶劣的市场环境中是否有足够的资本维持运转。 题主链接中的一级资本充足率(Tier 1 capital ratio) 亦即衡量标准,这个数字越大,表明银行资本约充裕,可以在停止…...
7、Linux C 进程通信
一、无名管道(pipe) 1. 函数介绍 #include <unistd.h> int pipe(int pfd[2]); 参数:pfd是一个包含两个整数的数组,pfd[0]为读描述符,pfd[1]为写描述符。 返回值:成功时返回0,失败时…...
Android Framework 层 Hook 技术详解
目录 Hook 技术概述 什么是 Hook 技术? Hook 技术的核心原理 Hook 技术的进化与创新 Hook 技术的魅力与局限 Android Framework 层结构 Framework 层在 Android 中的位置 Framework 层的核心组件 为什么 Framework 层适合 Hook? 常用 Hook 方法 方法替换:换个 “芯…...
java接口中 使用@RequestParam和@RequestPart区别
1. 介绍 这两个注解都是spring注解。 RequestParam通常用于获取请求参数,这些参数可以是URL中的查询参数,也可以是表单数据中的字段。而RequestPart则是用于处理多部分(multipart)请求中的部分,特别是当上传文件或处理…...
CentOS-7.0系统基础操作
配置ip地址 编辑网卡文件: vi etc/sysconfig/network-scripts/ifcfg-ens33 在网卡文件里参照如下设置: BOOTPROTO"static" IPADDR192.168.61.233 GATEWAY192.168.61.2 NETMASK255.255.255.0 ONBOOT"yes" 防火墙管理 开启防火墙&am…...
全星研发管理APQP软件系统:驱动汽车产品研发全周期,打造高效合规的质量管理引擎
全星研发管理APQP软件系统:驱动汽车产品研发全周期,打造高效合规的质量管理引擎 在汽车、电子、医疗器械等高度依赖质量管理的行业中,APQP(先期产品质量策划)作为国际通用的产品开发管理框架,是确保产品从…...
Maven 的下载与安装
背景 为什么要建立本地Maven ,idea 默认的maven 仓库是放在系统盘的,依赖每次都存在系统盘用就了C盘就爆炸了,所有我们可以在本地其他盘安装maven 建立仓库。 idea 默认的依赖拉取地址是maven 官网,我们建立本地仓库,…...
26考研——排序_插入排序(8)
408答疑 文章目录 二、插入排序基本概念插入排序方法直接插入排序算法描述示例性能分析 折半插入排序改进点算法步骤性能分析 希尔排序相关概念示例分析希尔排序的效率效率分析空间复杂度时间复杂度 九、参考资料鲍鱼科技课件26王道考研书 二、插入排序 基本概念 定义&#x…...
Mem0 Prompt优化
在使用mem0的时候,系统中自带的提取事件的Prompt, 效果很差,我们可以按照我们的需求修改 from datetime import datetime, timedeltacustom_fact_extraction_prompt f"""你是一位个人信息整理专家,专注于准确存…...
C++ STL常用算法之常用算术生成算法
常用算术生成算法 学习目标: 掌握常用的算术生成算法 注意: 算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric> 算法简介: accumulate // 计算容器元素累计总和 fill // 向容器中添加元素 accumulate 功能描述: 计算区间内容器元素…...
Kubernetes Webhook必要知识点:原理、配置与实践
#作者:邓伟 文章目录 1. 什么是 Kubernetes Webhook?2. Webhook 的工作原理2.1 准入控制器(Admission Controller)2.2 Webhook 类型 3. Webhook 的配置3.1 Webhook 配置文件3.2 配置字段说明 4. Webhook 的开发与部署4.1 开发 We…...
IGS 转 STL 全攻略:迪威模型在线转码助力 3D 建模
在 3D 建模与制造业领域,不同文件格式之间的转换是经常面临的重要任务。IGS 和 STL 作为其中两种常用格式,前者凭借出色的曲面表达能力,在 CAD 领域广泛应用;后者凭借简单的三角网格结构,成为 3D 打印、快速成型的行业…...
【Bug】记录2025年遇到的Bug以及修复方案
--------------------------------------------------------分割线 2025.3.25-------------------------------------------------------windows环境下通过命令行终端(必须是命令行下,直接赋值传递,代码正常)的形式传递字符串时&a…...
Unity UGUI - 六大基础组件
目录 一、Canvas上 1. Canvas:复制渲染子UI控件 2. ✨Canvas Scaler✨:画布分辨率自适应 3. Graphics Raycaster:射线事件响应 4. ✨Rect Transform✨:UI位置锚点对齐 二、Event System上 5. Event System 6. Standalone …...
TCP网络编程与多进程并发实践
一、引言 在网络编程中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。而多进程并发则是一种提高服务器处理能力的有效手段,允许服务器同时处理多个客户端的请求。本文将详细介绍如何使用 TCP 协议进…...
IM腾讯Trtc与vod云点播:实现合流录制并上传,根据参数返回视频地址
全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 文档传送门 2. java基础使用2.1 准备工作2.1.1 云控制台获取(密钥和密钥secret)2.1.2 找到trtc控制台2.1.3 vod云点播控制台 2.2 使用准备的数据进行操作2.2.0 引入依赖2.2.1 创建TrtcUtils工具类2.2.2 TrtcReqDTO 录制请求dt…...
HTTP协议手写服务器
目录 一、请求的是Web根目录 二、GET方法通过URL传参 三、根据资源类型对应出Content-Type值 四、Http代码 项目完整源代码:Http 周不才/cpp_linux study - 码云 - 开源中国 一、请求的是Web根目录 如果URL中请求的资源是Web根目录,则自动跳转到主…...
Uni-app入门到精通:subPackages节点为小程序的分包加载配置
subPackages节点用于为小程序的分包加载配置。因小程序有体积和资源加载限制,各小程序平台提供了分包方式,以加快小程序的下载和启动速度。主包用于放置默认启动页面、babBar页面,以及一些所有分包都会用到的公共资源或JS脚本;而分…...
DeepSeek本地部署(linux)
一、下载并安装Ollama 1.下载Ollama Ollama官网:Ollama 点击"Download",会跳转至下载页面。 1.1在线下载安装 可复制此命令到Linux服务器进行在线下载,如下载速度过慢,可选择离线下载安装。 curl -fsSL https://ollama.com/install.sh | sh1.2离线下载安装 …...
工具——(常用的软件)视频编辑器
软件工具 1、视频编辑器:filmora 9 2、图标无损放大:oCam 或者 Adobe Illustrator CS6 3、图片编辑:Photoshop CS6 4、截图置顶工具:Snipaste 或者 PixPin 5、抢票:Bypass 6、文本日志工具:N…...
Kafka 多线程开发消费者实例
目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单线程架构,那实在是有点暴殄天物了。不过,Kafka …...
org.apache.maven.surefire:surefire-junit-platform:jar:2.22.2 Maven打包失败
org.apache.maven.surefire:surefire-junit-platform:jar:2.22.2 解决办法 勾上这个,打包时跳过测试代码...
在Ubuntu中固定USB设备的串口号
获取设备信息 lsusb # 记录设备的Vendor ID和Product ID(例如:ID 0403:6001)# 获取详细属性(替换X和Y为实际设备号) udevadm info -a /dev/ttyUSBX 结果一般如下 创建udev规则文件 sudo gedit /etc/udev/rules.d/us…...