C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
strstr()函数:
作用:字符串查找。在一串字符串中,查找另一串字符串是否存在。
形参:
str2在str1中寻找。返回值是char*的指针
原理:如果在str1中找到了str2,则返回在str1中存在的str2的字符串的第一个字符的地址。如果在str1中每找到str2,则返回NULL(空指针)。
举例:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{char arr1[] = "abcdefgh";char arr2[] = "bcde";char arr3[] = "bcdeh";char* a1 = strstr(arr1, arr2);char* a2 = strstr(arr1, arr3);return 0;
}
a1是在arr1中寻找arr2,在arr1[1]~arr1[4]上找到了与arr2一样的字符串,则返回arr1中字符'b'的地址。
a2是在arr1中寻找arr3,在arr1中并未找到与arr1一样的字符串,则返回NULL。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{char arr1[] = "abcdefgh";char arr2[] = "bcde";char arr3[] = "bcdeh";char* a1 = strstr(arr1, arr2);char* a2 = strstr(arr1, arr3);if (a1 != NULL){printf("arr2找到了");//结果:arr2找到了}if (a2 == NULL){printf("arr3没找到");//结果:arr3没找到}return 0;
}
strstr()函数的模拟实现:
char* my_strstr(const char* str1, const char* str2)//因为两个地址值不会改变,所以加const
{assert(str1 && str2);//防止两个参数为NULLchar* pt1 = NULL;char* pt2 = NULL;char* nc = str1;//用于在字符串中找到与str2首元素一样字符。while (*nc)//当str1中找完了,都没有找到和str2中首元素一样的字符时停止循环。{pt1 = nc;//用于定位到每次找到和str2中首元素一样的字符的地址。pt2 = str2;//用于指向str2的首元素地址。while (*pt1 && *pt2 && ( * pt1 == *pt2))//找到和str2中首元素一样的字符{pt1++;pt2++;}if (*pt2 == '\0')//当上面的循环走完,ptr2的指向\0时,说明在str1中找到了和str2一样的字符串{return nc;//返回当时的字符串。}nc++;//当这个str1中的元素和str2不匹配,就要看下一个字符是否匹配。}return NULL;
}
int main()
{char arr1[] = "abbcdef";char arr2[] = "bcd";char* a1 = my_strstr(arr1, arr2);if (a1 != NULL){printf("arr2找到了\n");//结果:arr2找到了}else{printf("arr2没找到\n");}return 0;
}
补充:还有一种算法:KMP算法。也是一个字符串查找的算法。
strtok()函数:
作用:对字符串进行切分(分割)
#include <string.h>
参数:
str是将被分割的字符串
sep是需要传入的是字符串,sep内包含了需要作为分割符的字符的集合
如果要将str中分为三个部分:www、qq、com
那么就需要在@和.处进行分割。因此,@和.就是分割符,将分隔符放入sep字符串中,此时就是 :分割符的字符的集合
原理:
这里有个字符串str :"www@qq.com\0"
strtok()会将按照sep所指示的,在str中寻找sep内存在的字符。
找到@后,会将@改成\0。
strtok()返回@之前的字符串的首元素地址,即:str中第一个'w'的地址。
并且strtok会记录此时\0的位置。
strtok有两种机制:
1.如果strtok不为NULL,那么会保存@的位置(@会被改成\0)
2.如果strtok为 NULL,那么会从上次strtok所保存@的位置,继续往下找seq中的字符,如果找到,接着分割。最后再保存被改成\0的位置。
最后:如果strtok找到了没被改的\0,也就是字符串末尾的\0时,返回NULL。
那么有疑问了,strtok是怎么保存@的位置呢?
其实,想要保存某个数据,实际上就是创建一个全局变量。只要创建了全局变量,程序运行到哪里,无论在哪个函数中,都可以被使用。
因此,strtok就是利用全局变量的能力,从而保存了@的位置。那么strtok是怎么保存的呢?难道直接在代码中写上一个全局变量吗?显然不是。
strtok其实是使用static修饰了存放@位置的变量,因为static基本含义就是让一个变量成为全局变量。
static函数名除了对该函数声明的文件可见外,其他文件都无法访问。也就是只能被本文件中的函数调用,而不能被同一程序中的其他文件的函数调用。
static可以限定变量或函数为静态存储。静态函数会被自动分配在一个一直使用的存储区,直到程序结束才从内存消失,static限定的变量或函数不会和同一程序中其他文件同名的相冲突。如果用static限定内部变量,则该变量从程序一开始就用有内存,不会随其所在函数的调用和退出而分配和消失。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <assert.h>void cc()
{static int opp = 0;opp++;printf("%d", opp);
}int main()
{cc();//结果:1int opp = 3;cc();//结果:2return 0;
}
使用建议:
因为strtok的会对str字符串本身进行修改,如果不想对strtok进行修改时,可以用strcpy进行拷贝,然后对拷贝的字符串使用strtok
char arr[] = "www@qq.com";char* p = "@.";char tmp[20] = { 0 };strcpy(tmp, arr);//拷贝
实验:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <assert.h>
#include <string.h>int main()
{char arr[] = "www@qq.com";char* p = "@.";char tmp[20] = { 0 };strcpy(tmp, arr);char* ret = NULL;ret = strtok(tmp, p);printf("%s\n", ret);//wwwret = strtok(NULL,p);printf("%s\n", ret);//qqret = strtok(NULL, p);printf("%s\n", ret);//comret = strtok(NULL, p);printf("%s\n", ret);//(null)return 0;
}
创建了一个ret用于存放,每次strtok返回的字符串首元素地址。
第一次调用 strtok(tmp, p)拿到了(返回)'w'的地址,保存了@(\0)的位置。
第二次调用strtok(NULL,p)拿到了(返回)'q'的地址,保存了.(\0)的位置。
第三次调用strtok(NULL,p)拿到了(返回)'c'的地址,\0的位置。
第四次调用strtok(NULL,p)拿到了(返回)NULL,这是因为\0后面找不到p内包含的字符了。
结果打印三个部分:www、qq、com
代码强化:
这一个一个地调用strtok显然是不合理地。
并且我们发现除了第一次调用strtok,传入地第一个参数是一个活指针之外,后面的几次调用使用的都是NULL,因此我们可以创建一个循环,从而分割它们。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <assert.h>
#include <string.h>int main()
{char arr[] = "www@qq.com";char* p = "@.";char tmp[20] = { 0 };strcpy(tmp, arr);char* ret = NULL;for ( ret = strtok(tmp, p); ret != NULL; ret = strtok(NULL, p)){printf("%s\n", ret);}return 0;
}
for(初始化值;判断条件;对值改变)
初始化值,执行了strtok第一次调用。
判断条件,如果为strtok返回了NULL,说明没有分隔符了,for循环就停止。
对值改变,做到了除第一次以外,后n次地对strtok地调用。
模拟实现:
C语言源码剖析与实现——strtok()系列函数实现_strtok源码_C+G的博客-CSDN博客
strerror
作用:翻译错误码。在使用库函数的时候,如果失败了都会出现错误码,而这串错误码你完全不懂是什么意思,比如:5,这个错误码的意思是什么呢?肯定不知道吧。
错误码的作用是告诉你,你的代码执行过程中出现的错误。比如内存空间不足等等...
参数:
头文件:#include <string.h>
strerror返回的是一个地址,这个地址指向了一个字符串。这个字符串就是strerror从错误码所翻译出来的一句话。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <errno.h>int main()
{printf("%s\n", strerror(0));printf("%s\n", strerror(1));printf("%s\n", strerror(2));return 0;
}
除此之外,还有许多C语言内部的错误码。
errno:
errno是C语言定义的一个全局变量,它的作用是存放代码执行过程中出现的错误码。
它不需要人为的定义,当用到它的时候只需要引头文件:#include <errno.h>
举例:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <errno.h>int main()
{//fopen:打开文件FILE* pf = fopen("test.txt", "r");//test.txt不存在if(pf ==NULL)//fopen找不到test.txt会返回空指针printf("%s\n", strerror(errno));//返回错误信息return 0;
}
模拟实现:
单纯的翻译代码,因此不做实现。
相关文章:
C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror() strstr()函数: 作用:字符串查找。在一串字符串中,查找另一串字符串是否存在。 形参: str2在str1中寻找。返回值是char*的指针 原理:如果在str1中找到了str2&…...
【学习笔记】人工智能哲学研究:《心智、语言和机器》
关于人工智能哲学,我曾在这篇文章里 【脑洞大开】从哲学角度看人工智能:介绍徐英瑾的《心智、语言和机器》 做过介绍。图片来源:http://product.dangdang.com/29419969.html在我完成了一些人工智能相关的工作以后,我再来分享《心智…...
设计模式之门面模式(外观模式)
目录 1.模式定义 2.应用场景 2.1 电源总开关例子 2.2 股民炒股场景 编辑 3. 实例如下 4. 门面模式的优缺点 传送门: 项目中用到的责任链模式 给对象讲工厂模式,必须易懂易会 策略模式,工作中你用上了吗? 1.模式定…...
MySQL - 多表查询
目录1. 多表查询示例2. 多表查询分类2.1 等/非等值连接2.1.1 等值连接2.1.2非等值连接2.2 自然/非自然连接2.3 内/外连接2.3.1 内连接2.3.2 外连接3.UNION的使用3.1 合并查询结果3.1.1 UNION操作符3.1.2 UNION ALL操作符4. 7种JOIN操作5. join 多张表多表查询,也称为…...
自定义报表是什么?
自定义报表是指根据用户的需求和要求,自行设计和生成的报表。自定义报表可以根据用户的具体需求,选择需要的数据和指标,进行灵活的排列和组合,生成符合用户要求的报表。自定义报表可以帮助用户更好地了解业务情况,发现…...
windows安装docker-小白用【避坑】【伸手党福利】
目录实操开启 Hyper-V 和容器特性下载docker安装dockercmd中,使用命令测试是否成功报错解决办法:下载linux模拟器wsl:双击打开docker重新打开cmd,输入命令,成功显示sever和clinet实操 开启 Hyper-V 和容器特性 控制面…...
环形链表相关的练习
目录 一、相交链表 二、环形链表 三、环形链表 || 一、相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据…...
C++ 提示对话框
头文件 #include<iostream>#include<cstdio> using namespace std; 函数格式 MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) 参数 hWnd :此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。 lp…...
SprintBoot打包及profile文件配置
打成Jar包 需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中,可以使用maven的package;运行: java -jar xxx(jar包名) 操作步骤 第一步: 引入Spring Boot打包插件 <!--打包的插件--> <build><!--修改jar的名字--><fi…...
java面试-java集合
说说你如何选用集合? 需要键值对选用 map 接口下的集合,需要排序用 TreeMap, 不需要排序用 HashMap 不需要键值对仅存放元素则选择 Collection 下实现的接口,保证元素唯一使用 Set, 不需要则选用 List Collection 和 Collections 有什么区别…...
Node.js简介
客户端访问网页时向服务器端发送请求要访问服务器中的页面,服务器收到请求后向数据库中进行搜索,搜索到相关数据然后返回结果给客户端显示; 这个过程就类似于:客人(客户端)去饭馆(服务端&#…...
每天学一点之Lambda表达式
Lambda表达式 思想导入: 函数式编程思想: 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。编程中的函数,也有类似的概念,你调用我的时候,给我实参为形参赋…...
Raft分布式共识算法学习笔记
1. Raft算法 Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多 从本质上说&am…...
中介者模式
介绍 Java中介者模式(Mediator Pattern)是一种行为设计模式,它可以降低多个对象之间的耦合性,通过一个中介者对象来协调这些对象的交互. 在中介者模式中,多个对象之间的交互不是直接进行的,而是通过一个中介者对象来进行的.这个中介者对象封装了对象之间的交互逻辑,每个对象只…...
Kaggle赛题解析:Google手语识别
文章目录一、比赛前言信息二、比赛背景三、比赛任务四、评价指标五、数据描述六、解题思路一、比赛前言信息 比赛名称:Google - Isolated Sign Language Recognition 中文名称:帮助用户从PopSign游戏学习美国手语 比赛链接:https://www.ka…...
什么是ChatGPT?
目录前言一、什么是GPT?二、什么是ChatGPT?三、ChatGPT应用场景四、ChatGPT未来展望五、OpenAI介绍前言 3月3号,早上6:30就有人发消息给我,来问我有关GPT API的事件。 那是因为3月2号,OpenAI 发布了ChatGPT 3.5的开放…...
深入理解Zookeeper的ZAB协议
ZAB是什么ZAB(Zookeeper Atomic Broadcast):Zookeeper原子广播ZAB是为了保证Zookeeper数据一致性而产生的算法(指的是Zookeeper集群模式)。它不仅能解决正常情况下的数据一致性问题,还可以保证主节点发生宕…...
opencv-图像几何处理
缩放 缩放只是调整图像的大小。为此,opencv提供了一个cv2.resize()函数,可以手动指定图像大小,也可以指定缩放因子。你可以使用任意一种方法调整图像的大小: import cv2 from matplotlib import pyplot as pltlogo cv2.imread(…...
[前端笔记030]vue之hello、数据绑定、MVVM、数据代理、事件处理、计算属性和监视属性
前言 本笔记参考视频,尚硅谷:BV1Zy4y1K7SH p1 -p25官网文档完善,本文只做笔记使用,官网下载vue的开发版和生产版或者使用CDN,并去谷歌商店下载开发插件 简介 组件化模式,提高代码复用率,更好维护声明式编…...
每天学一点之注解、元注解
注解 1、注解概述 定义: 注解(Annotation),也叫元数据。与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 作用分类&#…...
STA环境
目录1. CMOS逻辑门2. 波形3. 时钟3.1. 指定时钟create_clock时钟延迟set_clock_latency 时钟不确定度set_clock_uncertainty 跨时钟域set_false_path3.2. 衍生时钟3.3. 虚拟时钟4. 时序路径2.1. 输入路径2.2. 输出路径2.3. 点对点约束本文介绍在执行静态时序分析(St…...
嵌入式系统实践 12 ——基于ARM汇编 Keil5 MSP432 P401R开发板
物联网实验1 阿里云远程控制小灯 ///****************************************************************************** // * // * MSP432P401 // * ----------------- // * | | // * | |…...
【密码学篇】密码行业标准汇总(GM)
【密码学篇】密码行业标准汇总(GM) 截止到2023年03月10日,共130个密码行业标准,适用商用密码应用与安全性评估等密码行业,可点击链接预览或下载标准—【蘇小沐】 文章目录【密码学篇】密码行业标准汇总(GM…...
桌面文件删除后没有在回收站原因和恢复方法
桌面误删文件回收站也没有怎么办?遇到电脑桌面文件误删了,重要数据回收站找不回这种情况不要慌!如今数据恢复技术很成熟,许多文件丢失问题都能够成功解决。下面我们就一起来了解下桌面误删文件回收站没有的原因和相关文件恢复方法…...
什么是业务运营?关键组成部分有哪些?
企业领导者使用收入运营和智能软件等技术来分析买家的不同接触点。这些见解决定了客户互动的成败,从而改善了业务运营,从而带来了成功。 什么是业务运营? 业务运营包括企业为保持盈利而执行的一系列日常任务。虽然这些任务可能因业务类型或行…...
腾讯云新用户怎么配置服务器的方法教程
腾讯云新用户怎么配置服务器?腾讯云服务器配置选择攻略,先选择云服务器地域和可用区,然后根据用户使用场景需要平衡型、计算型或高IO型等特性来选择云服务器CVM实例规格,主机教程网来详细说下腾讯云服务器配置选择攻略。 1、腾讯云…...
windows 11系统,通过ip地址远程连接连接ubuntu 22.04系统(共同局域网下,另一台主机不需要联网)
windows 11系统,通过ip地址远程连接连接ubuntu 22.04系统(不需要联网)问题来源问题分析解决方案问题来源 自己搭建了一台ubuntu系统作为深度学习的机器,但是学校的网络问题,一个账号只能同时登录3台设备。通过远程连接…...
头脑风暴(一):Controller层前端传参接收;在Service层实现类中?为何要build相关构建器?添加套餐业务分析
文章目录1 MyBatis中Controller层List集合接收数据,泛型添加与否1.1 案例场景1.2 应该用什么接收1.3 是否可以用其他方式接收?1.4 LIst集合接收可否不指定泛型1.5 mybatis中使用基本类型接收数据?resultType是集合中的元素的类型,…...
vue-cropper 拖动图片和截图框
现象 开发遇到vue--cropper不能拖动图片和截图框 解决方法 can-move-box设置为true,表示可以拖动截图框 can-move设置为true,表示可以拖动图片 *注意: 我外层套了一个el-col, el-col的宽高一定要大于截图框的宽高,否则移动不了…...
[Linux基础]history相关的环境变量设置
目录 背景 简介 命令操作 1. 语法: 2. 功能 3. 参数 环境变量设置 背景 工作中时常收到客户的反馈,我的系统什么也没干,就出现文件丢失,程序错误等等问题;我们在问题排查的时候查看history信息也是重要环节…...
怎么给电脑分盘与合并磁盘?教你三招
电脑只有一个C盘,想要再分出一个或多个分区,怎么办?电脑C盘的容量太小,太容易满了,想重新分盘,或者把其他盘跟它合并,但因为文件太多备份实在是太麻烦,怎么办?怎么给电脑…...
HCIP-5.4OSPF路由聚合、缺省路由
1、路由聚合 OSPF 是一种链路状态路由协议,因此 OSPF路由器不传输路由,而是传输链路状态信息。因此,OSPF 路由通过汇总 LSA 来控制链路状态信息的传输,从而减小 LSDB 数据库的大小,进而控制路由的汇总。 由于OSPF路由…...
【数据结构】——树与二叉树
文章目录树二叉树二叉树的性质完全二叉树二叉树的存储遍历二叉树和线索二叉树6.4 树和森林哈夫曼树应用树 树的定义:树是以分支关系定义的层次结构。 D; 树(Tree)是n(n≥0)个结点的有限集。 R 数据关系 有且仅有一个特定的称为根(Root) 的结点 当n>1时&…...
等离子纳秒高压脉冲电源维修HVP-20 P
等离子纳秒高压脉冲电源维修HVP-20 P;HVP-10B;HVP-05;HVP-02等型号均可维修 HVP-20 P(N)用于气体放电与低温等离子体的高性能纳秒高压脉冲电源。 HVP-20P(N)采用专有的marx电路,实现高压脉冲电源参数的便捷可调,包括峰值电压0 – 20 KV (-2…...
JavaScript内改变this指向
之前我们说的都是代码内 this 的默认指向今天我们要来说一下如何能改变 this 指向也就是说, 你指向哪我不管, 我让你指向哪, 你就得指向哪开局在函数的原型( Function.prototype ) 上有三个方法callapplybind既然是在函数的原型上, 那么只要是函数就可以调用这三个方法…...
Cobalt Strike---(2)
数据管理 Cobalt Strike 的团队服务器是行动期间Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来 自它的 Beacon payload 的输出,提取出目标、服务和凭据。 如果你想导出 Cobalt Strike 的数据,通过 Reporting → Export Data 。Cobalt Str…...
docker的命令使用和相关例子
Docker是一种流行的容器化平台,可以帮助开发人员更轻松地构建、发布和管理应用程序。下面是一些Docker的命令使用和相关例子: Docker镜像相关命令: 搜索Docker镜像: docker search 例子:docker search ubuntu 下载D…...
23模式--代理模式
本篇主要聊一些23中模型中的代理模式: 看一下百度百科的解释: 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目…...
【Linux】信号的产生、保存、捕捉处理 (四种信号产生、核心存储、用户态与内核态、信号集及其操作函数)
文章目录1、什么是信号?2、信号的产生2.1 通过键盘产生信号2.2 通过系统调用产生信号2.3 硬件异常产生的信号2.4 由软件条件产生的信号2.5 进程的核心转储3、信号的保存4、信号的捕捉4.1 用户态和内核态4.2 用户态到内核态的切换4.3 信号捕捉过程5、信号集操作函数以…...
redis经典五种数据类型及底层实现
目录一、Redis源代码的核心部分1.redis源码在哪里2.src源码包下面该如何看?二、我们平时说redis是字典数据库KV键值对到底是什么1.6大类型说明(粗分)2.6大类型说明3.上帝视角4.Redis定义了redisObject结构体4.1 C语言struct结构体语法简介4.2 字典、KV是什么4.3 red…...
三十而立却被裁,打工人要如何应对职场危机?
又到金三银四就业季,对于部分职场人来说,年龄成为了他们找工作的最大限制。 因为绝大部分企业招聘中层干部以下岗位的时候,都会要求年龄不超过35周岁,再加上每年千万毕业生涌入社会,竞争程度相当激烈,这就导…...
java面试-java基础
char 变量能不能存贮一个中文汉字?为什么? char 变量可以存贮一个汉字,因为 Java 中使用的默认编码是 Unicode ,一个 char 类型占 2 个字节(16 bit),一个汉字是2个字节,所以放一个中…...
Kafka 消息不丢失
Kafka 消息不丢失生产者丢失消费者丢失不丢失配置Kafka 保证消息不丢失:只对已提交的消息 (committed message) 做有限度的持久化保证 已提交的消息:当 n 个 Broker 成功接收到该消息并写入到日志文件后,就告诉生产者该消息已成功提交有限度…...
ASEMI高压MOS管10N65参数,10N65规格,10N65封装
编辑-Z ASEMI高压MOS管10N65参数: 型号:10N65 漏极-源极电压(VDS):650V 栅源电压(VGS):30V 漏极电流(ID):10A 功耗(PDÿ…...
LeetCode-416. 分割等和子集
目录题目分析回溯法动态规划动态规划(压缩)题目来源 416. 分割等和子集 题目分析 这道题目是要找是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 那么只要找到集合里能够出现 sum / 2 的子集总和,就算是可以分割成两个相同元素和子集了…...
2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2021.05.09】
一、试题A:求余(本题总分:5 分) 得:5分 本题总分:5 分 【问题描述】 在 C/C/Java/Python 等语言中,使用 % 表示求余,请问 2021%20 的值是多少? 【答案提交】 这是一道结果…...
elasticSearch写入原理
elasticSearch写入原理 最近学习完了es相关的课程整理除了es的核心内容,学习这东西知其然知其所以然,自己按照自己的理解整理了es相关的面试题。先热个身,整理一下es的写入原理,有不对的地方请大家指正。 这些原理的东西我觉得还是…...
第十四届蓝桥杯模拟赛(第三期)Python
1 进制转换 问题描述 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 答案:2730 def ch…...
Pytorch模型参数的保存和加载
目录 一、前言 二、参数保存 三、参数的加载 四、保存和加载整个模型 五、总结 一、前言 在模型训练完成后,我们需要保存模型参数值用于后续的测试过程。由于保存整个模型将耗费大量的存储,故推荐的做法是只保存参数,使用时只需在建好模…...
面试热点题:回溯算法之组合 组合与组合总和 III
什么是回溯算法? 回溯算法也可以叫回溯搜索算法,回溯是递归的"副产品",回溯的本质是穷举,然后选出我们需要的数据,回溯本身不是特别高效的算法,但我们可以通过"剪枝"来优化它。 理解回溯算法 回溯…...