【C语言_字符函数和字符串函数_复习篇】

目录

一、字符函数

        1.1 字符分类函数

        1.2 字符转换函数

二、字符串函数 

        2.1 strlen函数

                2.1.1 strlen函数的使用

                2.1.2 strlen函数的模拟实现

        2.2 strcpy函数

                2.2.1 strcpy函数的使用

                2.2.2 strcpy函数的模拟实现

        2.3  strcat函数

                2.3.1 strcat函数的使用

                2.3.2 strcat函数的模拟实现

        2.4 strcmp函数

                2.4.1 strcmp函数的使用

                2.4.2 strcmp函数的模拟实现

        2.5 strncpy函数

        2.6 strncat函数

        2.7 strncmp函数

        2.8 strstr函数

                2.8.1 strstr函数的使用

                2.8.2 strstr函数的模拟实现 

        2.9 strtok函数

        2.10 strerror函数


一、字符函数

1.1 字符分类函数

1. 字符分类函数就是用来判断字符属于什么类别的一些库函数,使用这些函数所要包含的头文件都是 <ctype.h>

2. 这些库函数的参数和返回类型都是一样的格式:int 名称( int c )。

3. 如果判断为真,则返回非零的值,如果判断为假,则返回0 

函数

如果参数符合下列条件就返回真

isupper

判断是否为大写字母

Islower

判断是否为小写字母

Isalpha

判断是否为字母

Isdigit

判断是否为十进制字符0~9

Isalnum

判断是否为字母或数字0~9

Isblank

判断是否为空字符

Isprint

判断是否为可打印字符

Isspace

判断是否为空格字符

Iscntrl

判断是否为控制字符

Isgraph

判断是否为图形字符

Ispunct

判断是否为标点符号字符

//练习:将一个字符串中的小写字母全部转换成大写字母
#include <stdio.h>
#include <ctype.h>int main()
{char str[] = "i am a student.";int i = 0;//下标while (str[i]){if (islower(str[i]))//如果str[i]是小写字母{str[i] -= 32;//先将str[i]转化为大写字母}putchar(str[i]);//再输出i++;}return 0;
}

1.2 字符转换函数

1. C语言中提供了两个字符转换函数,分别是 toupper() 将小写字母转换成大写和 tolower() 将大写字母转换成小写,使用这两个函数所要包含的头文件也 <ctype.h>

2. 字符转换函数和字符分类函数的参数和返回类型都是一样的格式:int 名称( int c )

     例如:int tolower(int c)、int toupper(int c)。

3. tolower函数逻辑:如果 c 是大写字母并且具有小写等效字母,则返回等效的小写字母的值,如果无法进行此类转换,则返回的值为 c 不变。

4. toupper函数逻辑:如果 c 是小写字母并且具有大写等效字母,则返回等效的大写字母的值,如果无法进行此类转换,则返回的值为 c 不变。

5. 传递给字符转换函数的参数本身的值是不会变的,字符转换函数只是实现字母的"变装"

//练习:将一个字符串中的小写字母全部转换成大写字母
#include <stdio.h>
#include <ctype.h>int main()
{char str[] = "i am a student.";int i = 0;//下标while (str[i]){putchar(toupper(str[i]));//将转换后的结果直接输出i++;}return 0;
}

二、字符串函数 

2.1 strlen函数

2.1.1 strlen函数的使用

1. strlen函数是专门用来计算字符串长度的函数,统计的是该字符串中\0之前的字符个数

2. strlen函数的参数是char*类型的指针返回类型是size_t类型的值(unsigned int)。

    size_t strlen(const char* str);

3. strlen函数所要包含的头文件是<string.h>

4. strlen函数计算字符串长度的逻辑:从函数所得到的参数,即指针str中的地址开始统计,如果str所指向的字符不是\0,统计的个数就+1。

5. 用strlen函数求的字符串长度之间不能直接比大小,因为无符号整型进行运算结果仍然会是无符号整型,如果想要直接比大小,请先把strlen求得的返回值转换成int类型

//strlen函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "hello";//5//char arr[] = { 'h', 'e', 'l', 'l', 'o' };//?//char arr[] = { 'h', 'e', 'l', 'l', 'o', '\0' };//5size_t len = strlen(arr);printf("%zd\n", len);return 0;
}
//用strlen函数求的字符串长度之间不能直接比大小,
//因为无符号整型进行运算结果仍然会是无符号整型,
//如果想要直接比大小,请先把strlen求得的返回值转换成int类型
#include <stdio.h>
#include <string.h>
int main()
{if (strlen("abcd") - strlen("abcdefg") > 0)//计算结果将是一个很大的正数{printf("hehe\n");//结果打印hehe}else{printf("haha\n");}//if ((int)strlen("abcd") - (int)strlen("abcdefg") > 0)//{//	printf("hehe\n");//}//else//{//	printf("haha\n");//结果打印haha//}return 0;
}

2.1.2 strlen函数的模拟实现

#include <stdio.h>
#include <assert.h>//写法一:计数器统计不是\0的字符
size_t my_strlen1(const char* ptr)
{assert(ptr != NULL);size_t count = 0;while (*ptr != '\0'){count++;ptr++;}return count;
}//写法二:指针 - 指针
size_t my_strlen2(const char* ptr)
{assert(ptr != NULL);const char* p = ptr;while (*p != '\0'){p++;}return p - ptr;
}//写法三:函数递归
size_t my_strlen3(const char* ptr)
{assert(ptr != NULL);if (*ptr == '\0'){return 0;}else{return 1 + my_strlen3(ptr + 1);//别ptr++}
}int main()
{char arr[] = "hello";size_t len = my_strlen3(arr);printf("%zd\n", len);return 0;
}

2.2 strcpy函数

2.2.1 strcpy函数的使用

1. strcpy函数是专门用来将一个字符串里的内容(包含\0)拷贝至另一个字符串中的函数。

2. strcpy函数的参数有两个,第一个是目标字符串的首地址第二个是源字符串的首地址返回类型是char*类型(目标字符串的首地址)。

    char* strcpy(char* destination, const char* source);

3. strcpy函数所要包含的头文件也是<string.h>

4. strcpy函数的实现逻辑:先定义一个指针p存放目标数组首元素的地址(即将函数第一个指针赋值给指针p),再将函数的第二个参数(存放源数组首元素地址的指针)一直至后面源数组中存放\0地址所指向的字符,依次传给目标数组首元素地址及之后的地址所指向的空间,实现拷贝操作,最后返回指针p。

5. 注意点:①源字符串必须以 '\0' 结束⽬标字符串的数组必须⾜够⼤,以确保能存放源字符串⽬标空间必须可修改(例如,不能是常量字符串的空间)

//strcpy函数的使用
//练习:将一个字符串拷贝至另一个字符串中
#include <stdio.h>
#include <string.h>
int main()
{char dest[] = "hello world!";char src[] = "abcde";char* p = "good night";//strcpy(p, dest);//errstrcpy(dest, src);//实现拷贝printf("%s\n", dest);//拷贝完后想看效果直接打印dest数组即可//printf("%s\n", strcpy(dest, src));//或将上面两行直接写成一行//因为strcpy的返回值就是dest数组首元素的地址return 0;
}

2.2.2 strcpy函数的模拟实现

#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* src)
{assert(dest && src);//NULL==0char* p = dest;while (*dest++ = *src++)//先参与*再++,虽++的优先级比*高,但这里是后置++{;}return p;
}int main()
{char arr1[20] = "hello world!";//保证dest空间足够,存放拼接后的字符串char arr2[] = "abcde";printf("%s\n", my_strcpy(arr1, arr2));return 0;
}//① NULL本质是0,一般用于指针初始化
//② \0 是\ddd形式的转义字符,本质也是0
//③ 文本中的null或NUL是\0的意思
//④ ‘0’ 是字符0,本质是48

2.3  strcat函数

2.3.1 strcat函数的使用

1. strcat函数是专门用来将一个字符串里的内容(包含\0)拼接至另一个字符串后的函数。

2. strcat函数的参数有两个,第一个是目标字符串的首地址第二个是源字符串的首地址返回类型是char*类型(目标字符串的首地址)。

    char* strcat(char* destination, const char* source);

3. strcat函数所要包含的头文件也是<string.h>

4. strcat函数的实现逻辑:先定义一个指针p存放目标数组首元素的地址(即将函数第一个指针赋值给指针p),再找到目标数组中的\0的地址,接着将函数的第二个参数(存放源数组首元素地址的指针)一直至后面源数组中存放\0地址所指向的字符,依次传给目标数组\0所在的地址及之后的地址所指向的空间,实现拼接操作,最后返回指针p。

5. 注意点:①源字符串和目标字符串中必须都要以 '\0' 结束⽬标字符串数组必须⾜够⼤,以确保能存放源字符串⽬标空间必须可修改(例如,不能是常量字符串的空间)④不要让字符串自己给自己拼接,因为在拼接的过程中源字符串中的字符会从目标字符串中的\0开始拼接,这样在自己给自己拼接时字符串里将没有\0,会造成无限凭借,直至程序崩溃。

//strcat函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[20] = "hello ";char arr2[] = "world!";printf("%s\n", strcat(arr1, arr2));return 0;
}

2.3.2 strcat函数的模拟实现

#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* src)
{assert(dest && src);char* p = dest;while (*dest != '\0')//使dest指针内的地址是\0的地址{dest++;}while (*dest++ = *src++){;}return p;
}int main()
{char arr1[20] = "hello ";//保证dest空间足够,存放拼接后的字符串char arr2[] = "world!";printf("%s\n", my_strcat(arr1, arr2));return 0;
}

2.4 strcmp函数

2.4.1 strcmp函数的使用

1. strcmp函数是专门用来比较两个字符串大小的函数。

2. strcmp函数的参数有两个,两个参数的内容分别是需要比较的两个字符串的首地址返回类型是int类型,字符串1>字符串2返回大于零的数,字符串1<字符串2返回小于零的数,字符串1等于字符串2返回0。

    int strcat(const char* str1, const char* str2);

3. strcmp函数所要包含的头文件也是<string.h>

4. strcmp函数的实现逻辑:将参数1和参数2两个指针所指向数组中元素一个一个对应进行比较它们的ASCII码值,如果字符相等且等于\0就返回0,如果字符相等且不等于\0就继续进行下一个字符的比较,如果参数1中字符ASCII码值大于参数2中字符的ASCII码值,则返回大于0的值,如果参数1中字符ASCII码值小于参数2中字符的ASCII码值,则返回小于0的值。

//strcmp函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "abcdefg";char arr2[] = "abcd";int ret = strcmp(arr1, arr2);if (ret > 0){printf("arr1>arr2\n");}else if (ret < 0){printf("arr1<arr2\n");}else{printf("arr1==arr2\n");}return 0;
}

2.4.2 strcmp函数的模拟实现

#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* p1, const char* p2)
{assert(p1 && p2);while (*p1 == *p2){if (*p1 == '\0'){return 0;}p1++;//和strcpy和strcat的区别,p2++;//此处是希望当*p1!=*p2时后面是比较的此时的值,而不希望++后比较后面的值}return p1 - p2;
}int main()
{char* p1 = "abcdegf";char* p2 = "hello";int ret = my_strcmp(p1, p2);if (ret > 0){printf("arr1>arr2\n");}else if (ret < 0){printf("arr1<arr2\n");}else{printf("arr1==arr2\n");}return 0;
}

2.5 strncpy函数

1. char * strncpy ( char * destination, const char * source, size_t num );

2. strncpy函数是在strcpy函数的基础上改良的(即strcpy的条件,strncpy都要满足),可以自定义从源字符串到⽬标字符串拷⻉的字符个数

3. 当num小于源字符串个数时,拷贝的内容并不会自动添加\0,如果num等于源字符串个数时,则和strcpy函数的效果一样,如果num大于源字符串个数时,则拷⻉完源字符串后,会在⽬标字符串的后边追加\0,直到满足num个

2.6 strncat函数

1. char * strncat ( char * destination, const char * source, size_t num );

2. strncat函数是在strcat函数的基础上改良的(即strcat的条件,strncat都要满足),可以实现从从源字符串到⽬标空间自定义拼接的字符个数(注意不管拼接几个字符都会自动添加\0,因为在进行拼接时,源字符串的字符会将目标字符串中末尾的\0覆盖掉)。

3. 当num小于源字符串个数时,拼接的内容并会自动添加\0,如果num等于源字符串个数时,则和strcat函数的效果一样,如果num大于源字符串个数时,则拼接完源字符串后,不会在⽬标字符串的后边追加\0

2.7 strncmp函数

1. int strncmp ( const char * str1, const char * str2, size_t num );

2. strncmp函数是在strcmp函数的基础上改良的(即strcmp的条件,strncmp都要满足),可以实现⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果发现比较的字符大小不⼀样,就会返回大于0或小于0的结束,如果num个字符都相等,就是相等返回0。

//strncmp函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "abcdef";char arr2[] = "abchhh";printf("%d\n", strncmp(arr1, arr2, 3));//前三个字符都是相等的所以返回0printf("%d\n", strncmp(arr1, arr2, 4));//在第4个字符中h大于d所以返回-1return 0;
}

2.8 strstr函数

2.8.1 strstr函数的使用

1. strstr函数是专门用来寻找字符串1中字符串2第一次出现的位置的函数。

2. strstr函数的参数有两个,分别是字符串1和字符串2的首地址,返回类型是char*类型(字符串2在字符串1中第一次出现的地址)

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

3. strstr函数所要包含的头文件也是<string.h>

4. 如果在str1中不能找到str2会返回一个NULL,所以在使用strstr函数的返回值时,要先判断一下是否为空指针

5. 在字符串1中寻找时不会比较字符串2中的\0是否也匹配。

//strstr函数的使用
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "hello world!";char arr2[] = "world";char* p = strstr(arr1, arr2);if (p != NULL){printf("%s\n", p);//打印world!}else{printf("找不到\n");}return 0;
}

2.8.2 strstr函数的模拟实现 

#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1, const char* str2)
{const char* cur = str1;const char* s1 = NULL;const char* s2 = NULL;assert(str1 && str2);if (*str2 == '\0'){return (char*)str1;}while (*cur){s1 = cur;s2 = str2;while (*s1 && *s2 && *s1 == *s2){s1++;s2++;}if (*s2 == '\0'){return (char*)cur;}cur++;}return NULL;
}int main()
{char arr1[] = "hello world!";char arr2[] = "world";char* p = my_strstr(arr1, arr2);if (p != NULL){printf("%s\n", p);//打印world!}else{printf("找不到\n");}return 0;
}

2.9 strtok函数

1. strtok函数是专门将字符串拆分为标记的函数。

2. strtok函数的参数有两个,第一个参数是所要拆分的字符串首元素的地址,第二个参数是装有要被拆分字符串中用作分隔符字符的字符数组的首元素地址

    char * strtok ( char * str, const char * sep);

3. strtok函数所要包含的头文件也是<string.h>

4. strtok函数的实现逻辑:strtok函数通过第一个参数找到str中的第⼀个标记,并将该标记修改为成\0,同时记录当前查找到的位置和返回指向第一个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改,即使用前先拷贝一份要被拆分的数组。)当想要找到第二个或以上的标记时,则需要再次调用strtok函数并且第一个参数要写成NULL。

5. strtok函数中的第⼀个参数如果不为 NULL ,函数将找到str中第⼀个标记同时记录当前查找到的位置。 strtok函数的第⼀个参数如果为 NULL ,函数将在同⼀个字符串中从上次保存的位置开始,查找下⼀个标记。如果字符串中不存在更多的标记或\0时,则返回NULL指针。

//strtok函数的使用
#include <stdio.h>
#include <assert.h>
int main()
{char arr1[] = "zhangsan@163.com";char arr2[30] = { 0 };//替身strcpy(arr2, arr1);const char* p = "@.";char* s = NULL;for (s = strtok(arr2, p); s != NULL; s = strtok(NULL, p)){printf("%s\n", s);}return 0;
}

2.10 strerror函数

1. strerror函数是专门可以把错误码对应的错误信息的字符串首地址返回来的函数。

2. strerror函数的参数是int类型的错误码返回类型是char*类型错误码对应的错误信息的字符串首地址)。

3. strerror函数所要包含的头文件有两个<errno.h>和<string.h>

4. 补充:在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会将对应的错误码,存放在errno中(每一次被调用函数发生错误后,errno中的错误码都会更新),⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

5. C语言是可以进行文件操作的,打开文件的函数是fopen返回参数是FILE*类型,如果文件打开成功,则返回一个地址,如果文件打开失败,则返回NULL。

//strerror函数的使用
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{FILE* pFile;pFile = fopen("unexist.ent", "r");//文件名+指令if (pFile == NULL){printf("Error opening file unexist.ent:%s\n", strerror(errno));//当我们在使⽤标准库中的函数的时候发⽣了某种错误,//就会将对应的错误码,存放在errno中//perror("Error opening file unexist.ent");}else{printf("读取成功\n");}return 0;
}

本篇已完结。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hololens2发布unity设置

生成vs工程再向hololens发布时&#xff0c; Architecture选X64或ARM64都可以成功发布

es索引操作命令

索引操作 index 创建索引 put 方法创建索引 使用 put 创建索引时必须指明文档id&#xff0c;否则报错 # PUT 创建命令 # test1 索引名称 # type1 类型名称&#xff0c;默认为_doc&#xff0c;已经被废弃 # 1 文档id PUT /test1/type1/1 {"name":"zhangsan&…

【leetcode】二叉树的前序遍历➕中序遍历➕后序遍历

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. 二叉树的前序遍历2. 二叉树的中序遍历3. 二叉树的后序遍历 1. 二叉树的前序遍历 点击查看题目 根…

lv17 安防监控项目实战 3

代码目录 框架 our_storage 编译最终生成的目标文件obj 编译生成中间的.o文件 data_global.c 公共资源定义&#xff08;使用在外extern即可&#xff09;定义了锁定义了条件变量消息队列id、共享内存id、信号量id及key值发送短信、接收短信的号码向消息队列发送消息的函数&am…

华为汽车业务迎关键节点,长安深蓝加入HI模式,车BU预计今年扭亏

‍编辑 |HiEV 一年之前&#xff0c;同样是在电动汽车百人会的论坛上&#xff0c;余承东在外界对于华为和AITO的质疑声中&#xff0c;第一次公开阐释了华为选择走智选车模式的逻辑。 一年之后&#xff0c;伴随问界M7改款、问界M9上市&#xff0c;华为智选车模式的面貌已经发生了…

【Maven篇】解锁 Maven 的智慧:依赖冲突纷争下的版本调停者

缘起 软件开发世界是一个充满无限可能的领域&#xff0c;但同时也伴随着诸多挑战。其中之一&#xff0c;就是依赖冲突的问题。在这篇文章中&#xff0c;我们将揭开 Maven 这位“版本调停者”的神秘面纱&#xff0c;深入探讨如何在版本纠纷的盛宴中解决依赖问题。 Maven&#…

RDP爆破

工具&#xff1a;超级弱口令检查工具 第一步&#xff1a;双击打开工具 第二步&#xff1a;导入账号 第三步&#xff1a;导入密码 第三步&#xff1a;线程 线程默认是50&#xff0c;如果担心影响业务可以修改为5 第四步&#xff1a;填写目标 第五步&#xff1a;选择需要检查的…

前端入职配置新电脑!!!

前端岗位入职第一天到底应该做些什么呢&#xff1f;又该怎样高效的认识、融入团队&#xff1f;并快速进入工作状态呢&#xff1f;这篇文章就来分享一下&#xff0c;希望对即将走向或初入前端职场的你&#xff0c;能够有所帮助。内含大量链接&#xff0c;欢迎点赞收藏&#xff0…

jenkins使用公共库问题

Jenkins解决上编译解决引用问题 本地运行 把公共库创建链接到指定项目目录下即可 mklink /d /j D:\codepath\xxxx\yyyyy\tool_base D:\codepath\tool_base

香港公司变更注册地址所需材料及流程全解析

香港公司变更注册地址&#xff1a;所需材料及流程全解析 各位老板好&#xff0c;我是经典世纪胡云帅&#xff0c;随着业务的拓展和发展&#xff0c;香港公司可能需要变更其注册地址。变更注册地址不仅关系到公司的日常运营&#xff0c;还与公司的法律地位和品牌形象息息相关。本…

cesium HeadingPitchRoll HeadingPitchRange

一、HeadingPitchRoll表示Heading、Pitch、Roll&#xff0c;用于orientation属性上的&#xff0c;比如camera的setView&#xff0c;flyTo var heading Cesium.Math.toRadians(0.0);var pitch Cesium.Math.toRadians(-25.0);var roll Cesium.Math.toRadians(0);viewer.camera…

餐饮店引流活动方案与最佳营销方案揭秘

想开实体店或正在创业的朋友们&#xff0c;大家好&#xff01;我是一名资深的实体店创业者&#xff0c;本人经营鲜奶吧5年时间&#xff0c;做的是社区店&#xff0c;今天我将分享一些餐饮店引流活动和营销方案的干货&#xff0c;希望能给大家带来一些启发和帮助。 一、引流活动…

基于多尺度视网膜增强图像去雾算法(MSR,Multi-Scale Retinex),Matalb实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供有偿…

【Flink SQL】Flink SQL 基础概念(四):SQL 的时间属性

《Flink SQL 基础概念》系列&#xff0c;共包含以下 5 篇文章&#xff1a; Flink SQL 基础概念&#xff08;一&#xff09;&#xff1a;SQL & Table 运行环境、基本概念及常用 APIFlink SQL 基础概念&#xff08;二&#xff09;&#xff1a;数据类型Flink SQL 基础概念&am…

浅谈C++的模板—— 这一篇就够了

今天我们来谈谈C中有关于模板的知识&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;对于C模板来说&#xff0c;我们首先得了解以下几个术语 函数模板模板函数模板实例化模板特例化模板的实参推演模板的非类型参数非模板函数类模板模板类选择性实例化 下面&#xff0c;我…

在Visual Studio中调试 .NET源代码

前言 在我们日常开发过程中常常会使用到很多其他封装好的第三方类库&#xff08;NuGet依赖项&#xff09;或者是.NET框架中自带的库。如果可以设置断点并在NuGet依赖项或框架本身上使用调试器的所有功能&#xff0c;那么我们的源码调试体验和生产效率会得到大大的提升。今天我…

数据分析 | Matplotlib

Matplotlib 是 Python 中常用的 2D 绘图库&#xff0c;它能轻松地将数据进行可视化&#xff0c;作出精美的图表。 绘制折线图&#xff1a; import matplotlib.pyplot as plt #时间 x[周一,周二,周三,周四,周五,周六,周日] #能量值 y[61,72,66,79,80,88,85] # 用来设置字体样式…

vulnhub ---- Dr4g0n b4ll

文章目录 网段扫描隐藏目录隐写尝试通过ssh连接提权路径劫持 网段扫描 nmap -sn 命令用于执行主机存活扫描&#xff0c;仅检测目标网络中的活动主机&#xff0c;而不进行端口扫描。 ┌──(root㉿kali)-[~/Downloads] └─# nmap -sn 10.10.10.0/24 …

计算机网络——物理层(宽带接入技术)

计算机网络——物理层&#xff08;宽带接入技术&#xff09; 什么是宽带有线带宽接入xDSLADSL 技术ADSL 的大部分组成 光纤同轴混合网&#xff08;HFC 网&#xff09;机顶盒与电缆调制解调器&#xff08;set-top box&#xff09; FTTx 技术光配线网 ODN (Optical Distribution …

nginx 基本使用、借助 nginx 和 mkcert 实现本地 https://localhost 测试。

CSDN 如何将资源设置为免费&#xff1f; 安装和基本使用 进入 nginx 官网 下载 Mainline version 版本 解压到一个你喜欢的位置&#xff0c;比如解压到 C: 目录 不管配不配置环境变量&#xff0c;对 nginx 的所有操作都应该在对应文件夹中 基本命令的使用&#xff1a; cd …