字符函数和字符串函数
字符分类函数
C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。
这些函数的使用都需要包含⼀个头文件:ctype.h
这些函数的用法非常类似。
int islower ( int c )
islower
是能够判断参数部分是否是小写字母的。
通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回0
练习:
写⼀个代码,将字符串中的小写字母转大写,其他字符不变。
#include<stdio.h>
#include<ctype.h>
int main()
{char str[] = "Test String";int i = 0;while(str[i])//'\0'的ASCLL码为0//while (str[i] != '\0'){if (islower(str[i]))str[i] -= 32;//写法一:putcharputchar(str[i]);i++;}printf("\n");//写法二:%sprintf("%s", str);return 0;
}输出结果:
TEST STRING
TEST STRING
字符转换函数
C语⾔提供了2个字符转换函数,头文件为ctype.h
int tolower(int c);//将参数传进去的大写字母转小写字母
int toupper(int c);//将参数传进去的小写字母转大写字母
上面的代码,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使用转换函数。
#include<stdio.h>
#include<ctype.h>
int main()
{char str[] = "Test String";int i = 0;while (str[i]){if (islower(str[i]))str[i] = toupper(str[i]);putchar(str[i]);i++;}return 0;
}
strlen的使用和模拟实现
基本用法
strlen
是C语言库函数,功能是求字符串长度。
头文件为string.h
size_t strlen ( const char * str );
- 统计的是从
strlen
函数的参数str
中这个地址开始向后,\0
之前字符串中字符的个数(不包含'\0'
)。 strlen
函数会⼀直向后找\0
字符,直到找到为止,所以可能存在越界查找。
我们可以通过代码来理解:
#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abc";char arr2[] = { 'a', 'b' , 'c' };char arr3[] = { 'a', 'b' , 'c' , '\0' };printf("%s\n%s\n%s\n", arr1, arr2, arr3);int len1 = strlen(arr1);int len2 = strlen(arr2);int len3 = strlen(arr3);printf("%d\n%d\n%d\n", len1, len2, len3);return 0;
}
运行结果为:
我们可以看到,字符串中有\0
和无\0
的结果不同,这是因为arr2
因为没有\0
而打印没有停止,继续打印了一些随机值。
- 函数的返回值为
size_t
,是无符号的。
#include<stdio.h>
#include<string.h>
int main()
{if (strlen("abc") - strlen("abcdef") > 0)printf(">");elseprintf("<");return 0;
}
输出结果为>
strlen
的返回值为size_t
类型,是无符号整型。
无符号整型 - 无符号整型,结果为无符号整型。
模拟实现
方法一
//计数器方式
size_t my_strlen(const char* str)
{assert(str);//assert(str != NULL);size_t count = 0;while (*str){count++;str++;}return count;
}
int main()
{char str[] = "Test String";size_t i = my_strlen(str);printf("%zd", i);return 0;
}
方法二
:
//指针 — 指针
#include<stdio.h>
#include<assert.h>size_t my_strlen(const char* str)
{assert(str);//assert(str != NULL);char* p = str;while (*str){str++;}return str - p;
}
int main()
{char str[] = "Test String";size_t i = my_strlen(str);printf("%zd", i);return 0;
}
方法三
:
//不创建临时变量——函数递归
#include<stdio.h>
#include<assert.h>size_t my_strlen(const char* str)
{assert(str);//assert(str != NULL);if (*str == '\0')return 0;elsereturn 1 + my_strlen(str + 1);
}
int main()
{char str[] = "Test String";size_t i = my_strlen(str);printf("%zd", i);return 0;
}
strcpy
的使用和模拟实现
基本用法
strcpy
是C语言库函数,功能是字符串的拷贝。
头文件为string.h
char* strcpy(char * destination, const char * source );
- Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
- 源字符串必须以\0结束。
- 会将源字符串中的’\0’拷贝到目标空间,拷贝至’\0’`结束。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可修改(常量字符串不能作为目标空间)。
strcpy
的返回值为目标空间的起始地址(便于链式访问)。
:::
#include<stdio.h>
#include<string.h>int main()
{char arr1[20] = "abcdef";char arr2[20] = "ghijkl";strcpy(arr1, arr2);printf("%s", arr1);return 0;
}
模拟实现
#include<stdio.h>
#include<assert.h>char* my_strcpy (char* des, const char* sour)
{char* p = des;assert(des && sour);while (*des++ = *sour++)//=的返回值为所赋的值{;}//拷贝\0*des = *sour;return p;
}
int main()
{char arr1[20] = "abcdef";char arr2[20] = "ghijkl";my_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}
strcat
的使用和模拟实现
基本用法
strcat
是C语言库函数,功能是追加字符串。
头文件为string.h
char * strcat ( char * destination, const char * source );
- Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination.
- 源字符串必须以’\0’结束。
- 目标字符串中也得有’\0’,否则不知道从哪里开始追加。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
- 返回值为目标空间的地址。
- 不适用于字符串自己给自己追加。
#include<stdio.h>
#include<string.h>int main()
{char arr1[20] = "hello ";char arr2[20] = "world!";strcat(arr1, arr2);printf("%s", arr1);return 0;
}
模拟实现
#include<stdio.h>
#include<assert.h>char* my_strcat(char* des, const char* sour)
{char* p = des;assert(des && sour);//找到'\0'while (*des){des++;}//追加字符串while (*des++ = *sour++){;}return p;
}int main()
{char arr1[20] = "hello ";char arr2[20] = "world!";my_strcat(arr1, arr2);printf("%s", arr1);return 0;
}
注意:strcat`不适用于字符串自己给自己追加。
#include<stdio.h>
#include<string.h>
#include<assert.h>char* my_strcat(char* des, const char* sour)
{char* p = des;assert(des && sour);while (*des){des++;}while (*des++ = *sour++){;}return p;
}int main()
{char arr1[20] = "abc";my_strcat(arr1, arr1);printf("%s", arr1);//陷入死循环//源字符串中的'\0'被破坏return 0;
}
#include<stdio.h>
#include<string.h>int main()
{char arr1[20] = "abc";strcat(arr1, arr1);printf("%s", arr1);//输出 abcabc//在VS中,strcat能够实现字符串自己给自己的追加return 0;
}
strcmp
的使用和模拟实现
基本用法
strcmp
是C语言库函数,功能是比较字符串。
- This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.
- 比较的不是字符串的长度,而是对应位置 ASCLL 码值的大小。
- 标准规定:
- 第⼀个字符串大于第二个字符串,则返回大于0的数字
- 第⼀个字符串等于第二个字符串,则返回0
- 第⼀个字符串小于第二个字符串,则返回小于0的数字
#include<stdio.h>
#include<string.h>int main()
{int i = strcmp("abcde", "abq");printf("%d", i);//输出 -1return 0;
}
#include<stdio.h>
#include<string.h>int main()
{int r = strcmp("abcdef", "abq");if (r == 1)printf("字符串一大于字符串二");else if (r == 0)printf("字符串一等于字符串二");elseprintf("字符串一小于字符串二");return 0;
}这串代码正不正确?
在VS2022等部分编译器中,是正确的,因为这些编译器的返回值只为-1,1,0。
模拟实现
方法一
//VS2022中的写法
#include<stdio.h>
#include<assert.h>int my_strcmp(const char* str1, const char* str2)
{while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}if (*str1 > *str2)return 1;elsereturn -1;
}
int main()
{int i = strcmp("abcde", "abq");printf("%d", i);return 0;
}
方法二
#include<stdio.h>
#include<assert.h>int my_strcmp(const char* str1, const char* str2)
{while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}return *str1 - *str2;
}
int main()
{int i = my_strcmp("abcde", "abq");printf("%d", i);return 0;
}
strncpy
函数的使用
strncpy
是C语言库函数,功能是字符串的拷贝。
头文件为string.h
char * strncpy ( char * destination, const char * source, size_t num );
- 拷贝
num
个字符从源字符串到目标空间。 - 如果源字符串的长度小于
num
,则拷贝完源字符串之后,在目标的后边追加\0
,直到num
个。 - 返回值为目标空间的地址。
#include<stdio.h>
#include<string.h>int main()
{char str1[20] = "abcdef";char str2[20] = "ghi";strncpy(str1, str2, 5);printf("%s", str1);return 0;
}
strncat
函数的使用
char * strncat ( char * destination, const char * source, size_t num );
- 将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个\0字符
- 如果source指向的字符串的长度小于num的时候,只会将字符串中到\0的内容追加到指向的字符串末尾。
- 返回值为目标空间的地址。
#include<stdio.h>
#include<string.h>int main()
{char str1[20] = "abc";char str2[20] = "defghi";strncat(str1, str2, 3);printf("%s", str1);return 0;
}
#include<stdio.h>
#include<string.h>int main()
{char str1[20] = "xxx\0xxxxxx";char str2[20] = "abc";strncat(str1, str2, 6);printf("%s", str1);return 0;
}
注意:字符串给自身追加的操作用**strncat**
更安全。
#include<stdio.h>
#include<string.h>int main()
{char str1[20] = "abcdefghi";size_t len = strlen(str1);strncat(str1, str1, len);printf("%s", str1);//输出 abcdefghiabcdefghireturn 0;
}
strncmp
函数的使用
int strncmp ( const char * str1, const char * str2, size_t num );
- 比较str1和>str2的前num个字符,如果相等就继续往后比较,**最多比较num<个字母,如果提前发现不⼀样,就提前结束,大的字符所在的字符串大于另外⼀个。如果字符都相等,就是相等返回0
- 比较的不是字符串的长度,而是对应位置 ASCLL 码值的大小。
- 标准规定:
- 第⼀个字符串大于第二个字符串,则返回大于0的数字
- 第⼀个字符串等于第二个字符串,则返回0
- 第⼀个字符串小于第二个字符串,则返回小于0的数字
#include<stdio.h>
#include<string.h>int main()
{char str1[20] = "abcdefg";char str2[20] = "abcde";int i = strncmp(str1, str2, 7);printf("%d", i);//输出 0return 0;
}
strstr
的使用和模拟实现
strstr
是C语言库函数,功能是在字符串中查找子串。
头文件为string.h
基本功能
char * strstr ( const char * str1, const char * str2);
- Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1<中第⼀次出现的位置)。
- The matching process does not include the terminating null-characters, but it stops there. (字符串的比较匹配不包含\0字符,以\0作为结束标志)。
#include<stdio.h>
#include<string.h>int main()
{char str1[20] = "abcdefabcdef";char str2[20] = "def";char* p = strstr(str1, str2);if (p == NULL)printf("找不到");elseprintf("找到了");return 0;
}
模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);//强制类型转换,更加规范char* p1 = (char*) str1;char* p2 = (char*) str2;if (!*str2/* *str2 == '\0' */)return (char*)str1;while (*p1){//多次匹配保留起始位置char* s1 = p1;char* s2 = p2;while (*s1 && *s2 && !(*s1 - *s2)/* *s1 == *s2 */){s1++;s2++;}if (!*s2)return p1;p1++;}return NULL;
}int main()
{char str1[20] = "abcdefabcdef";char str2[20] = "def";char* p = my_strstr(str1, str2);if (p == NULL)printf("找不到\n");else{printf("找到了\n");printf("%s", p);}return 0;
}
strtok
函数的使用
char * strtok ( char * str, const char * sep);
● sep参数指向⼀个字符串,定义了用作分隔符的字符集合
● str参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记。
● strtok函数找到str中的下⼀个标记,并将其用\0结尾,返回⼀个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串⼀般都是临时拷贝的内容并且可修改。)
● strtok函数的第⼀个参数不为NULL,strtok函数将保存它在字符串中的位置。
● strtok函数的第⼀个参数为NULL,函数将在同⼀个字符串中被保存的位置(存放于一个静态变量中)开始,查找下⼀个标记。
● 如果字符串中不存在更多的标记,则返回NULL指针。
#include<stdio.h>
#include<string.h>int main()
{char arr1[] = "zpw@bitedu.net";const char arr2[] = "@.";char* p = strtok(arr1, arr2);printf("%s\n", arr1);//输出 zpwprintf("%s\n", p);//输出 zpwreturn 0;
}
#include<stdio.h>
#include<string.h>int main()
{char arr1[] = "zpw@bitedu.net";const char arr2[] = "@.";char* r = NULL; char* p1 = strtok(arr1, arr2);char* p2 = strtok(r, arr2);printf("%s\n", p1);//输出 zpwprintf("%s\n", p2);//输出 biteedureturn 0;
}
strerror函数的使用
基本用法
char * strerror ( int errnum );
strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来,头文件为string.h。
在不同的系统和C语言标准库的实现中都规定了⼀些错误码,⼀般是放在errno.h这个头文件中说明的,C语言程序启动的时候就会使用⼀个全面的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应的错误码,存放在errno中,而⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。
#include<stdio.h>
#include<string.h>
#include<errno.h>int main()
{int i = 0;for (i = 0; i <= 10; i++){printf("%d:%s\n", i, strerror(i));}return 0;
在vs2022 + windows11
环境下,输出结果为:
0:No error
1:Operation not permitted
2:No such file or directory
3:No such process
4:Interrupted function call
5:Input/output error
6:No such device or address
7:Arg list too long
8:Exec format error
9:Bad file descriptor
10:No child processes
#include<stdio.h>
#include<string.h>
#include<errno.h>int main()
{FILE* pf = fopen("test.txt", "r");//以读的形式打开文件if (pf == NULL){//打开文件失败printf("错误信息是:%s\n", strerror(errno));//输出 错误信息是: No such file or directory}return 0;
}
perror
函数的使用
void perror(const char* str);
#include<stdio.h>
#include<string.h>
#include<errno.h>int main()
{FILE* pf = fopen("test.txt", "r");//以读的形式打开文件if (pf == NULL){//打开文件失败perror("错误信息是");//输出 错误信息是: No such file or directory//在括号中加字符串时,会自动添加':'和' 'printf("错误信息是: %s\n", strerror(errno));//输出 错误信息是: No such file or directory}return 0;
}
相关文章:
字符函数和字符串函数
字符分类函数 C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。 这些函数的使用都需要包含⼀个头文件:ctype.h 这些函数的用法非常类似。 int islower ( int c )islower是能够判断参数部分是否是小写字母的。 通过返…...
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
在现代开发中,开发者经常会遇到各种需要编写和学习新技术的任务。ChatGPT作为一种强大的自然语言处理工具,不仅可以辅助编写代码,还可以帮助学习新的编程概念和解决开发中的难题。本文将以开发一个BPMN(业务流程建模与标注&#x…...
深度学习2
四、tensor常见操作 1、元素值 1.1、获取元素值 tensor.item() 返回tensor的元素;只能在一个元素值使用,多个报错,当存在多个元素值时需要使用索引进行获取到一个元素值时在使用 item。 1.2、元素值运算 tensor对元素值的运算:…...
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
一.背景 公司是非煤采矿业,核心业务是采选,大型设备多,安全风险因素多。当下政府重视安全,头部技术企业的安全解决方案先进但价格不低,作为民营企业对安全投入的成本很敏感。利用我本身所学,准备搭建公司的…...
单片机学习笔记 9. 8×8LED点阵屏
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...
c++ 力扣题(1)JZ64
JZ64求123...n_牛客题霸_牛客网 因此不能使用等差求和(禁掉位运算为了禁掉等差求和,右移一位就是等差除二)、循环、递归来解决 我们运用到在 统计构造次数所学到的内容: 1.可以利用静态全局变量的思想来做 2.构造n次对象&…...
logback动态获取nacos配置
文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog,使用的时候、特别是部署的时候,需要改环境&#…...
基于零相差前馈补偿的 PID 控制
零相差前馈补偿是一种结合前馈补偿与反馈控制的策略,旨在提高控制系统对参考信号的跟踪精度。通过设计合理的前馈补偿器,使得系统对参考输入实现零相位差的跟踪,同时利用 PID 控制器保证系统的稳定性和动态性能。 1. 原理概述 目标ÿ…...
任务通知的本质(任务通知车辆运行) 软件定时器的本质(增加游戏音效)
任务通知的本质 没有任务通知 所谓"任务通知",你可以反过来读"通知任务"。 我们使用队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可 以明确指定:通知哪个任务。 使用队列、信号量、…...
如何在 MySQL 中进行数据导入和导出?
在 MySQL 中进行数据的导入和导出是一项常见的任务,用于数据备份、恢复、迁移以及数据分析等多种用途。MySQL 提供了多种方法来进行数据的导入和导出,每种方法都有其适用的场景和特点。以下是几种常用的 MySQL 数据导入和导出方法,包括命令行…...
python语言基础-5 进阶语法-5.3 流式编程
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 5.3 流式编程(参考链接:https://www.zhihu.com/question/59062…...
centos 服务器 docker 使用代理
宿主机使用代理 在宿主机的全局配置文件中添加代理信息 vim /etc/profile export http_proxyhttp://127.0.0.1:7897 export https_proxyhttp://127.0.0.1:7897 export no_proxy"localhost,127.0.0.1,::1,172.171.0.0" docker 命令使用代理 例如我想在使用使用 do…...
[个人专属博客] - docker安装
🎉🎉🎉🎉🎉🎉 欢迎访问的个人博客:http://swzbk.site/,加好友,一起赚🧧🧧🧧 🎉🎉🎉🎉&…...
推荐一个QDirStat基于 Qt 的目录统计工具
QDirStat 是一款基于 Qt 的目录统计工具,旨在帮助用户分析磁盘空间使用情况并进行清理。QDirStat的一些主要特点和功能: 跨平台兼容性:QDirStat 支持 Linux、BSD、Unix-like 系统以及 macOS,确保了广泛的用户基础。 直观的数据展…...
yolo自动化项目实例解析(九) 导航
比如我们经常使用的导航,说白了就是寻找两点之间最近的路径,也就是所谓的寻路,我们需要想办法让程序知道他要去哪里,路径包含(起点、轨迹、终点) 一、录制轨迹 从平面角度来看,我们可以把区域视…...
MySQL 报错:1137 - Can‘t reopen table
MySQL 报错:1137 - Can’t reopen table 1. 问题 对临时表查询: select a.ts_code,a.tsnum,b.tsnum from (select t.ts_code ,count(*) tsnum from tmp_table t group by t.ts_code having count(*) > 20 and count(*)< 50 ) a ,(select t.ts_…...
Bokeh实现大规模数据可视化的最佳实践
目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…...
HTMLCSS:比赛记分卡
效果演示 这段 HTML 和 CSS 代码创建了一个卡片式的体育比赛信息展示组件,用于显示篮球比赛的两个队伍名称、比赛时间、比分以及一些装饰性的视觉元素。 HTML <div class"card"><div data-status"inprogress" class"teams"…...
什么是 Faiss?
好的,我来详细解释 Faiss,它的用途、使用场景,以及如何安装和使用。 什么是 Faiss? Faiss 是由 Facebook AI Research 开发的一个开源库,专门用于高效的相似性搜索和聚类。它非常擅长在高维向量空间中进行快速搜索&a…...
【prism】遇到一个坑,分享!
背景 我通用prism的方式写了一个弹窗,弹窗绑定一个 Loaded 事件,但是Loaded事件一直不触发!!! 具体过程 我的loaded事件也是通过命令的方式绑定的: <i:Interaction.Triggers><i:EventTrigger EventName="Loaded...
vue制作代码比较工具
前两天朋友问我 有没有vue可以做一个json代码在线比较工具 我也是在网上搜了一下找到的 废话不说 直接上代码 采用 v3 pnpm i v-code-diff <div><CodeDiff:old-string"oldStr":new-string"newStr"output-format"side-by-side"/>…...
GPT系列文章
GPT系列文章 GPT1 GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结:GPT 是一种半监督学习,采用两阶段任务模型,通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…...
Qt实现可拖拽的矩形
之前项目上需要用Qt来绘制可拖拽改变形状的矩形。看了Qt Graphics相关的内容,虽然对Qt怎么添加图元的有了些了解,但是具体如何实现拖拽效果,一时也没有什么好的想法。还好网上有人分享的例子,很受启发。后来又回顾了一下这部分的代…...
python爬虫初体验(五)—— 边学边玩小游戏
1. 打开浏览器 利用webbrowser 模块的 open()函数可以启动一个新浏览器,打开指定的 URL。 import webbrowser webbrowser.open(http://inventwithpython.com/) 2. 猜数字游戏 # -*- coding: utf-8 -*- # This is a guess the number game. import randomsecretN…...
学习日志015--python单链表
创建 class Node:def __init__(self,data):# 数据域self.data data# 链接域self.next Noneclass LinkList:def __init__(self,):# 初始化头节点self.head None# 记录链表的长度self.size 0 增加 #头插def insert_head(self,value):# 创建新节点node Node(value)q self…...
51WORLD与南京水利研究院联合研发,国产数字孪生超融合一体机
近日,太湖流域水治理国际会议在江苏省无锡市举行。大会由水利部国际合作与科技司、河湖管理司、中国水利学会、水利部太湖流域管理局、无锡市人民政府、中国交通建设集团有限公司指导,南京水利科学研究院主办,以“践行新发展理念、推进流域水…...
自动泊车变自动撞车?小米SU7遭遇批量事故
科技新知 原创作者丨依蔓 编辑丨蕨影 小米系统bug,70多辆小米SU7同一天自动泊车撞墙、撞柱! 近日,多名车主反映小米汽车SU7标准版“自动泊车”功能出现故障,造成不同程度的撞击、剐蹭损伤。 小米客服此前回应涉事车主࿰…...
异常和中断
在计算机系统中,异常和中断是两种常见的用于处理异步事件的机制。以下是常见的异常和中断及其特点的详细解释: 异常(内中断) 异常,也称为内中断,是由CPU内部事件引起的中断。异常通常与程序执行的当前指令…...
代理IP在后端开发中的应用与后端工程师的角色
目录 引言 代理IP的基本概念和工作原理 代理IP在后端开发中的应用 网络爬虫与数据采集 负载均衡与性能优化 安全防护与隐私保护 后端工程师在使用代理IP时面临的挑战 结论 引言 在数字化时代,网络技术的飞速发展极大地推动了各行各业的发展。其中ÿ…...
设计模式之 观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象(Subject)。当主题对象的状态发生变化时,所有依赖于它的观察者都会得到…...
SQLSever显示物理和逻辑 IO活动量的相关信息及显示分析、编译和执行各语句所需的毫秒数。
SQLSever SET STATISTICS IO显示物理和逻辑 IO活动量的相关信息及SET STATISTICS TIME显示分析、编译和执行各语句所需的毫秒数。 1、 SET STATISTICS IO (Transact-SQL) 物理 IO 与访问磁盘上的数据页相关,逻辑 IO 与访问内存中的数据页(数据缓存&…...
CSS3 动画:前端开发的动态美
CSS3 动画:前端开发的动态美 CSS3 动画是现代网页设计中不可或缺的一部分,它为静态的网页元素添加了动态效果,提升了用户体验。本文将深入探讨CSS3动画的基础知识、高级技巧,并展示如何在实际项目中应用这些动画。 CSS3 动画基础 CSS3动画主要通过@keyframes和动画属性(…...
JavaWeb之综合案例
前言 这一节讲一个案例 1. 环境搭建 然后就是把这些数据全部用到sql语句中执行 2.查询所有-后台&前台 我们先写后台代码 2.1 后台 2.2 Dao BrandMapper: 注意因为数据库里面的名称是下划线分割的,我们类里面是驼峰的,所以要映射 …...
基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】
🎈系统亮点:协同过滤算法、二维码识别; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框…...
使用 Maven 构建一个简单的 Java 项目
Apache Maven 是一个强大的构建自动化工具,主要用于 Java 项目。它简化了构建和管理任何基于 Java 的项目的流程。 本指南将涵盖 Maven 的安装、设置一个简单的 Java 项目以及使用 Maven 运行该项目。 1. 安装 安装 Java 在安装 Maven 之前,需要确保…...
【51单片机】LCD1602液晶显示屏
学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602(Liquid Crystal Display)液晶显示屏是…...
UDP协议
UDP(UserDatagramProtocol)是一个简单的传输层协议,特点:无连接、不可靠、面向数据包、全双工。 报文结构 1.源端口: 源端口号,需要对方回信时选用,不需要时全部置0. 2.目的端口:目…...
阅读 ADiffusion-Based Framework for Multi-Class Anomaly Detection
A Diffusion-Based Framework for Multi-Class Anomaly Detection 我觉得引言部分写的不错,将问题清楚的讲出来了,值得借鉴!! 摘要 基于重建的方法在异常检测方面取得了显著成果。最近流行的扩散模型的卓越图像重建能力引发了研…...
网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析1
文章目录 1、RAID6配置指南(大致步骤)2、注意事项3、截图和视频 网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操 RAID6是一种在存储系统中实现数据冗余和容错的技术,其最多可以容忍两块磁盘同时损坏而不造成数据丢失。RAID…...
ts- declare关键词及vue3报错“Window typeof globalThis”上不存在属性“nextLoading”、`
报错“Window & typeof globalThis”上不存在属性“nextLoading”、 代码环境:vue3、ts 阮一峰讲解 declarets 用法告诉编译器某个类型是存在的 下面的例子是脚本使用浏览器全局对象document。 declare var document; document.title "Hello";上面…...
【STM32】在 STM32 USB 设备库添加新的设备类
说实话,我非常想吐槽 STM32 的 USB device library,总感觉很混乱。 USB Device library architecture 根据架构图: Adding a custom class 如果你想添加新的设备类,必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…...
【单点知识】基于PyTorch讲解自动编码器(Autoencoder)
文章目录 0. 前言1. 自动编码器的基本概念1.1 定义1.2 目标1.3 结构 2. PyTorch实现自动编码器2.1 导入必要的库2.2 定义自动编码器模型2.3 加载数据2.4 训练自动编码器 3. 自动编码器的意义4. 自动编码器的应用4.1 图像处理4.2自然语言处理:4.3推荐系统:…...
html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转
效果图: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…...
【蓝桥杯C/C++】翻转游戏:多种实现与解法解析
博客主页: [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 💯题目💯问题分析解法一:减法法解法二:位运算解法解法三:逻辑非解法解法四:条件运算符解法解法五:数组映射法不同解法的比较…...
介绍一下toupper(ch);函数(c基础)
hi , I am 36 适合对象c语言初学者 toupper(ch1); tolower(ch2); 是返回ch的大写或小写的字符但并不改变ch 若传递数字仍返回该数字 格式 #include<ctype.h> char res toupper(ch); 链接扫雷游戏代码分享(c基础)-CSDN博客 hi , I am 36. thanks for your look…...
如何使用Python代码实现给GPU预加热
如何使用Python代码实现给GPU预加热 一、引言二、使用深度学习框架进行预加热2.1 TensorFlow预加热2.2 PyTorch预加热三、使用CUDA进行预加热四、预加热的效果评估与优化五、结论与展望在高性能计算和深度学习领域,GPU(图形处理器)已经成为不可或缺的加速工具。然而,在实际…...
基于 SpringBoot 的作业管理系统【附源码】
基于 SpringBoot 的作业管理系统 效果如下: 系统注册页面 学生管理页面 作业管理页面 作业提交页面 系统管理员主页面 研究背景 随着社会的快速发展,信息技术的广泛应用已经渗透到各个行业。在教育领域,课程作业管理是学校教学活动中的重要…...
LeetCode题解:26.删除有序数组中的重复项【Python题解超详细,双指针法】,知识拓展:原地修改
题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &…...
docker 容器运行Ruoyi-cloud
1,linux系统安装openjdk1.8,mvn,dokcer,node,git 2,拉取代码 1)查看gitee仓库地址 2)创建/app文件夹,进入app目录 mkdir /app cd /app 3)clone代码 4)修改配置文件中nacos地址 # 修改注…...
【Unity How】Unity中如何实现物体的匀速往返移动
直接上代码 using UnityEngine;public class CubeBouncePingPong : MonoBehaviour {[Header("移动参数")][Tooltip("移动速度")]public float moveSpeed 2f; // 控制移动的速度[Tooltip("最大移动距离")]public float maxDistance 5f; // 最大…...