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

字符函数和字符串函数

字符分类函数

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语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。 这些函数的使用都需要包含⼀个头文件&#xff1a;ctype.h 这些函数的用法非常类似。 int islower ( int c )islower是能够判断参数部分是否是小写字母的。 通过返…...

如何利用ChatGPT加速开发与学习:以BPMN编辑器为例

在现代开发中&#xff0c;开发者经常会遇到各种需要编写和学习新技术的任务。ChatGPT作为一种强大的自然语言处理工具&#xff0c;不仅可以辅助编写代码&#xff0c;还可以帮助学习新的编程概念和解决开发中的难题。本文将以开发一个BPMN&#xff08;业务流程建模与标注&#x…...

深度学习2

四、tensor常见操作 1、元素值 1.1、获取元素值 tensor.item() 返回tensor的元素&#xff1b;只能在一个元素值使用&#xff0c;多个报错&#xff0c;当存在多个元素值时需要使用索引进行获取到一个元素值时在使用 item。 1.2、元素值运算 tensor对元素值的运算&#xff1a;…...

工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程

一.背景 公司是非煤采矿业&#xff0c;核心业务是采选&#xff0c;大型设备多&#xff0c;安全风险因素多。当下政府重视安全&#xff0c;头部技术企业的安全解决方案先进但价格不低&#xff0c;作为民营企业对安全投入的成本很敏感。利用我本身所学&#xff0c;准备搭建公司的…...

单片机学习笔记 9. 8×8LED点阵屏

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

c++ 力扣题(1)JZ64

JZ64求123...n_牛客题霸_牛客网 因此不能使用等差求和&#xff08;禁掉位运算为了禁掉等差求和&#xff0c;右移一位就是等差除二&#xff09;、循环、递归来解决 我们运用到在 统计构造次数所学到的内容&#xff1a; 1.可以利用静态全局变量的思想来做 2.构造n次对象&…...

logback动态获取nacos配置

文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog&#xff0c;使用的时候、特别是部署的时候&#xff0c;需要改环境&#…...

基于零相差前馈补偿的 PID 控制

零相差前馈补偿是一种结合前馈补偿与反馈控制的策略&#xff0c;旨在提高控制系统对参考信号的跟踪精度。通过设计合理的前馈补偿器&#xff0c;使得系统对参考输入实现零相位差的跟踪&#xff0c;同时利用 PID 控制器保证系统的稳定性和动态性能。 1. 原理概述 目标&#xff…...

任务通知的本质(任务通知车辆运行) 软件定时器的本质(增加游戏音效)

任务通知的本质 没有任务通知 所谓"任务通知"&#xff0c;你可以反过来读"通知任务"。 我们使用队列、信号量、事件组等等方法时&#xff0c;并不知道对方是谁。使用任务通知时&#xff0c;可 以明确指定&#xff1a;通知哪个任务。 使用队列、信号量、…...

如何在 MySQL 中进行数据导入和导出?

在 MySQL 中进行数据的导入和导出是一项常见的任务&#xff0c;用于数据备份、恢复、迁移以及数据分析等多种用途。MySQL 提供了多种方法来进行数据的导入和导出&#xff0c;每种方法都有其适用的场景和特点。以下是几种常用的 MySQL 数据导入和导出方法&#xff0c;包括命令行…...

python语言基础-5 进阶语法-5.3 流式编程

声明&#xff1a;本内容非盈利性质&#xff0c;也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站&#xff0c;会尽量附上原文链接&#xff0c;并鼓励大家看原文。侵删。 5.3 流式编程&#xff08;参考链接&#xff1a;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安装

&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389; 欢迎访问的个人博客&#xff1a;http://swzbk.site/&#xff0c;加好友&#xff0c;一起赚&#x1f9e7;&#x1f9e7;&#x1f9e7; &#x1f389;&#x1f389;&#x1f389;&#x1f389;&…...

推荐一个QDirStat基于 Qt 的目录统计工具

QDirStat 是一款基于 Qt 的目录统计工具&#xff0c;旨在帮助用户分析磁盘空间使用情况并进行清理。QDirStat的一些主要特点和功能&#xff1a; 跨平台兼容性&#xff1a;QDirStat 支持 Linux、BSD、Unix-like 系统以及 macOS&#xff0c;确保了广泛的用户基础。 直观的数据展…...

yolo自动化项目实例解析(九) 导航

比如我们经常使用的导航&#xff0c;说白了就是寻找两点之间最近的路径&#xff0c;也就是所谓的寻路&#xff0c;我们需要想办法让程序知道他要去哪里&#xff0c;路径包含&#xff08;起点、轨迹、终点&#xff09; 一、录制轨迹 从平面角度来看&#xff0c;我们可以把区域视…...

MySQL 报错:1137 - Can‘t reopen table

MySQL 报错&#xff1a;1137 - Can’t reopen table 1. 问题 对临时表查询&#xff1a; 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 代码创建了一个卡片式的体育比赛信息展示组件&#xff0c;用于显示篮球比赛的两个队伍名称、比赛时间、比分以及一些装饰性的视觉元素。 HTML <div class"card"><div data-status"inprogress" class"teams"…...

什么是 Faiss?

好的&#xff0c;我来详细解释 Faiss&#xff0c;它的用途、使用场景&#xff0c;以及如何安装和使用。 什么是 Faiss&#xff1f; Faiss 是由 Facebook AI Research 开发的一个开源库&#xff0c;专门用于高效的相似性搜索和聚类。它非常擅长在高维向量空间中进行快速搜索&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系列文章。总结&#xff1a;GPT 是一种半监督学习&#xff0c;采用两阶段任务模型&#xff0c;通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…...

Qt实现可拖拽的矩形

之前项目上需要用Qt来绘制可拖拽改变形状的矩形。看了Qt Graphics相关的内容&#xff0c;虽然对Qt怎么添加图元的有了些了解&#xff0c;但是具体如何实现拖拽效果&#xff0c;一时也没有什么好的想法。还好网上有人分享的例子&#xff0c;很受启发。后来又回顾了一下这部分的代…...

python爬虫初体验(五)—— 边学边玩小游戏

1. 打开浏览器 利用webbrowser 模块的 open()函数可以启动一个新浏览器&#xff0c;打开指定的 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与南京水利研究院联合研发,国产数字孪生超融合一体机

近日&#xff0c;太湖流域水治理国际会议在江苏省无锡市举行。大会由水利部国际合作与科技司、河湖管理司、中国水利学会、水利部太湖流域管理局、无锡市人民政府、中国交通建设集团有限公司指导&#xff0c;南京水利科学研究院主办&#xff0c;以“践行新发展理念、推进流域水…...

自动泊车变自动撞车?小米SU7遭遇批量事故

科技新知 原创作者丨依蔓 编辑丨蕨影 小米系统bug&#xff0c;70多辆小米SU7同一天自动泊车撞墙、撞柱&#xff01; 近日&#xff0c;多名车主反映小米汽车SU7标准版“自动泊车”功能出现故障&#xff0c;造成不同程度的撞击、剐蹭损伤。 小米客服此前回应涉事车主&#xff0…...

异常和中断

在计算机系统中&#xff0c;异常和中断是两种常见的用于处理异步事件的机制。以下是常见的异常和中断及其特点的详细解释&#xff1a; 异常&#xff08;内中断&#xff09; 异常&#xff0c;也称为内中断&#xff0c;是由CPU内部事件引起的中断。异常通常与程序执行的当前指令…...

代理IP在后端开发中的应用与后端工程师的角色

目录 引言 代理IP的基本概念和工作原理 代理IP在后端开发中的应用 网络爬虫与数据采集 负载均衡与性能优化 安全防护与隐私保护 后端工程师在使用代理IP时面临的挑战 结论 引言 在数字化时代&#xff0c;网络技术的飞速发展极大地推动了各行各业的发展。其中&#xff…...

设计模式之 观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听一个主题对象&#xff08;Subject&#xff09;。当主题对象的状态发生变化时&#xff0c;所有依赖于它的观察者都会得到…...

SQLSever显示物理和逻辑 IO活动量的相关信息及显示分析、编译和执行各语句所需的毫秒数。

SQLSever SET STATISTICS IO显示物理和逻辑 IO活动量的相关信息及SET STATISTICS TIME显示分析、编译和执行各语句所需的毫秒数。 1、 SET STATISTICS IO (Transact-SQL) 物理 IO 与访问磁盘上的数据页相关&#xff0c;逻辑 IO 与访问内存中的数据页&#xff08;数据缓存&…...

CSS3 动画:前端开发的动态美

CSS3 动画:前端开发的动态美 CSS3 动画是现代网页设计中不可或缺的一部分,它为静态的网页元素添加了动态效果,提升了用户体验。本文将深入探讨CSS3动画的基础知识、高级技巧,并展示如何在实际项目中应用这些动画。 CSS3 动画基础 CSS3动画主要通过@keyframes和动画属性(…...

JavaWeb之综合案例

前言 这一节讲一个案例 1. 环境搭建 然后就是把这些数据全部用到sql语句中执行 2.查询所有-后台&前台 我们先写后台代码 2.1 后台 2.2 Dao BrandMapper&#xff1a; 注意因为数据库里面的名称是下划线分割的&#xff0c;我们类里面是驼峰的&#xff0c;所以要映射 …...

基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】

&#x1f388;系统亮点&#xff1a;协同过滤算法、二维码识别&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框…...

使用 Maven 构建一个简单的 Java 项目

Apache Maven 是一个强大的构建自动化工具&#xff0c;主要用于 Java 项目。它简化了构建和管理任何基于 Java 的项目的流程。 本指南将涵盖 Maven 的安装、设置一个简单的 Java 项目以及使用 Maven 运行该项目。 1. 安装 安装 Java 在安装 Maven 之前&#xff0c;需要确保…...

【51单片机】LCD1602液晶显示屏

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是…...

UDP协议

UDP&#xff08;UserDatagramProtocol&#xff09;是一个简单的传输层协议&#xff0c;特点&#xff1a;无连接、不可靠、面向数据包、全双工。 报文结构 1.源端口&#xff1a; 源端口号&#xff0c;需要对方回信时选用&#xff0c;不需要时全部置0. 2.目的端口&#xff1a;目…...

阅读 ADiffusion-Based Framework for Multi-Class Anomaly Detection

A Diffusion-Based Framework for Multi-Class Anomaly Detection 我觉得引言部分写的不错&#xff0c;将问题清楚的讲出来了&#xff0c;值得借鉴&#xff01;&#xff01; 摘要 基于重建的方法在异常检测方面取得了显著成果。最近流行的扩散模型的卓越图像重建能力引发了研…...

网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析1

文章目录 1、RAID6配置指南&#xff08;大致步骤&#xff09;2、注意事项3、截图和视频 网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操 RAID6是一种在存储系统中实现数据冗余和容错的技术&#xff0c;其最多可以容忍两块磁盘同时损坏而不造成数据丢失。RAID…...

ts- declare关键词及vue3报错“Window typeof globalThis”上不存在属性“nextLoading”、`

报错“Window & typeof globalThis”上不存在属性“nextLoading”、 代码环境&#xff1a;vue3、ts 阮一峰讲解 declarets 用法告诉编译器某个类型是存在的 下面的例子是脚本使用浏览器全局对象document。 declare var document; document.title "Hello";上面…...

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 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自然语言处理&#xff1a;4.3推荐系统&#xff1a…...

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…...

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 &#x1f4af;题目&#x1f4af;问题分析解法一&#xff1a;减法法解法二&#xff1a;位运算解法解法三&#xff1a;逻辑非解法解法四&#xff1a;条件运算符解法解法五&#xff1a;数组映射法不同解法的比较…...

介绍一下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 的作业管理系统 效果如下&#xff1a; 系统注册页面 学生管理页面 作业管理页面 作业提交页面 系统管理员主页面 研究背景 随着社会的快速发展&#xff0c;信息技术的广泛应用已经渗透到各个行业。在教育领域&#xff0c;课程作业管理是学校教学活动中的重要…...

LeetCode题解:26.删除有序数组中的重复项【Python题解超详细,双指针法】,知识拓展:原地修改

题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &…...

docker 容器运行Ruoyi-cloud

1&#xff0c;linux系统安装openjdk1.8,mvn,dokcer,node,git 2&#xff0c;拉取代码 1&#xff09;查看gitee仓库地址 2&#xff09;创建/app文件夹&#xff0c;进入app目录 mkdir /app cd /app 3&#xff09;clone代码 4&#xff09;修改配置文件中nacos地址 # 修改注…...

【Unity How】Unity中如何实现物体的匀速往返移动

直接上代码 using UnityEngine;public class CubeBouncePingPong : MonoBehaviour {[Header("移动参数")][Tooltip("移动速度")]public float moveSpeed 2f; // 控制移动的速度[Tooltip("最大移动距离")]public float maxDistance 5f; // 最大…...