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

C语言 字符函数汇总,模拟实现各字符函数(炒鸡详细)

目录

求字符串长度

strlen

示例

模拟实现strlen

长度不受限制的字符串函数

strcpy

示例

模拟实现strcpy

strcat

模拟实现strcat

strcmp

示例 

模拟实现strcmp

长度受限制的字符串函数介绍

strncpy

示例

模拟实现strncpy

strncat

示例 

模拟实现strncat 

strncmp

示例

模拟实现strncmp

字符串查找

strstr

示例

模拟实现strstr

strtok

示例

模拟实现strtok

错误信息报告

strerror

示例 

字符分类函数


求字符串长度

strlen

size_t strlen ( const char * str );
  1. 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 '\0' )
  2. 参数指向的字符串必须要以 '\0' 结束。
  3. 注意函数的返回值为size_t,是无符号的

示例

 const char*str1 = "abcdef";const char*str2 = "bbb";if(strlen(str2)-strlen(str1)>0){printf("str2>str1\n");} else{printf("srt1>str2\n");}

模拟实现strlen

#include <stdio.h>size_t my_strlen(const char* str) {size_t count = 0;while (str[count] != '\0') {count++;}return count;
}int main() {const char* str = "Hello, World!";size_t length = my_strlen(str);printf("字符串的长度为: %zu\n", length);return 0;
}

长度不受限制的字符串函数

strcpy

copy字符串到目标字符串,应该使用strcpy

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

  1. 源字符串必须以 '\0' 结束。
  2. 会将源字符串中的 '\0' 拷贝到目标空间。
  3. 目标空间必须足够大,以确保能存放源字符串。
  4. 目标空间必须可变

示例

    char name[20] = {0};strcpy(name, "zhang\0hai");printf("%s\n", name); // zhang

模拟实现strcpy

char *my_strcpy(char *dest, const char *str)
{assert(dest && str);char *res = dest;while (*dest++ = *str++){}return res;
}   char arr1[] = "abc\0def";
char arr2[] = {0};
my_strcpy(arr2, arr1);
printf("%s\n", arr2); // abc

strcat

拼接字符串到目标字符串,应该使用strcat

char * strcat ( char * destination , const char * source );
  1. 源字符串必须以 '\0' 结束。
  2. 目标空间必须有足够的大,能容纳下源字符串的内容。
  3. 目标空间必须可修改。
    /* 同样 strcpy同strcpy大概一致,需保持足够大的空间,遇\0停止 */char arr1[] = "demo";// strcat(arr1, "emo");// printf("%s", arr1); // demoemostrcat(arr1, "em\0o");printf("%s", arr1); // demoem

模拟实现strcat

char *my_strcat(char *dest, const char *str)
{char *res = dest;assert(dest && str);while (*dest != '\0') // 找到目标空间的末尾\0{dest++;}while (*dest++ = *str++){;}return res;
}char arr3[20] = "hello ";
my_strcat(arr3, "world");
printf("%s\n", arr3); // hello world

strcmp

两个字符串比较相等,应该使用strcmp

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

比较是基于字符的 ASCII 值来进行的。strcmp() 会逐个比较两个字符串对应位置上的字符的 ASCII 值,并按照以下规则返回结果:

当找到不同的字符时,根据其 ASCII 值的大小关系决定比较结果。较小的字符对应的字符串被认为是较小的。如果一个字符串是另一个字符串的前缀,则较短的字符串被认为是较小的。

strcmp() 是区分大小写的。大写字母的 ASCII 值小于小写字母的 ASCII 值。

strcmp() 返回一个整数,表示两个字符串的比较结果。

  1. 如果字符串相等,则返回 0。
  2. 如果第一个字符串小于第二个字符串,则返回一个负整数。
  3. 如果第一个字符串大于第二个字符串,则返回一个正整数。

下面是一些比较的示例:

  •      strcmp(“apple”, “apple”) 返回 0,因为两个字符串相等。
  •      strcmp(“apple”, “banana”) 返回一个负整数,因为 “apple” 的 ASCII 值小于 “banana”。
  •      strcmp(“banana”, “apple”) 返回一个正整数,因为 “banana” 的 ASCII 值大于 “apple”。
  •      strcmp(“apple”, “Apples”) 返回一个正整数,因为 ‘a’ 的 ASCII 值大于 ‘A’。

示例 

    char arr1[20] = "zhangsan";char arr2[20] = "zhangsanfeng";int res = strcmp(arr1, arr2);if (res < 0){printf("<\n"); // <}else if (res == 0){printf("=\0");}else{printf(">\0");}

模拟实现strcmp

int my_strcmp(const char *s1, const char *s2)
{assert(s1 && s2);while (*s1 == *s2){if (*s1 == '\0'){return 0; // 如果全等 abc == abc}s1++;s2++;}return *s1 - *s2;
}char arr4[] = "zhanghai";
char arr5[] = "zhanghai";
printf("%d\n", my_strcmp(arr4, arr5)); // 0

长度受限制的字符串函数介绍

strncpy

strncpy 函数用于从源字符串复制指定数量的字符到目标字符串中,如果源字符串长度小于指定长度,则会用空字符进行填充。

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

  1. 拷贝num个字符从源字符串到目标空间。
  2. 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

示例

 在这个示例中,我们声明了一个目标字符串 dest,一个源字符串 src 以及要复制的字符数量 n。然后,我们使用 strncpy 函数将 src 中的前 n 个字符复制到 dest 中。最后,我们手动添加了一个结尾标记 \0,以确保目标字符串正确终止。最后,我们打印复制后的目标字符串 dest

请注意,要确保目标字符串 dest 的长度足够大,以容纳复制的字符和结尾标记。如果 n 大于等于源字符串的长度,那么目标字符串将没有结尾标记

#include <stdio.h>
#include <string.h>int main() {char dest[20];const char* src = "Hello, World!";size_t n = 5;printf("源字符串: %s\n", src);printf("复制的字符数: %zu\n", n);strncpy(dest, src, n);dest[n] = '\0';  // 添加结尾标记printf("目标字符串: %s\n", dest);return 0;
}

模拟实现strncpy

#include <stdio.h>char* my_strncpy(char* dest, const char* src, size_t n) {size_t i;for (i = 0; i < n && src[i] != '\0'; i++) {dest[i] = src[i];}for ( ; i < n; i++) {dest[i] = '\0';  // 如果源字符串长度小于 n,则用空字符填充}return dest;
}int main() {char dest[20];const char* src = "Hello, World!";size_t n = 5;printf("源字符串: %s\n", src);printf("复制的字符数: %zu\n", n);my_strncpy(dest, src, n);printf("目标字符串: %s\n", dest);return 0;
}

strncat

char * strncat ( char * dest , const char * src , size_t n );

strncat 用于将指定长度的字符串拼接(追加)到目标字符串的末尾。

参数说明:

  • dest:目标字符串,要将源字符串拼接到其末尾的字符串。
  • src:源字符串,要拼接到目标字符串末尾的字符串。
  • n:要拼接的最大字符数,即 src 中要拷贝的字符数。

strncat 函数的作用是将 src 指向的字符串的前 n 个字符(如果 src 的长度小于 n 则拷贝整个字符串)追加到 dest 指向的字符串的末尾,并在目标字符串的末尾添加字符串结尾标志 \0

该函数会返回指向目标字符串 dest 的指针,即拼接后的字符串的起始地址。

需要注意的是,目标字符串 dest 必须有足够的空间来容纳源字符串 src 的字符。否则,会导致缓冲区溢出和未定义的行为。
同时,strncat 不会检查源字符串 src 是否符合 C 字符串的规范(即是否以 \0 结尾),因此要确保源字符串 src 以 \0 结尾,以避免结果不符合预期。

示例 

在这个示例中,我们通过 strncat 函数将源字符串 src 的前 7 个字符拼接到目标字符串 dest 的末尾。输出中的最后一行显示了拼接后的字符串 dest。由于目标字符串 dest 的长度限制在 20 个字符,所以只有部分字符被拼接进去,因此输出结果是 “Hello, Wo”。

#include <stdio.h>
#include <string.h>int main() {char dest[20] = "Hello";const char* src = ", World!";size_t n = 7;printf("目标字符串: %s\n", dest); // 目标字符串: Helloprintf("源字符串: %s\n", src);    // 源字符串: , World!printf("拼接的字符数: %zu\n", n); // 拼接的字符数: 7strncat(dest, src, n);printf("拼接后的字符串: %s\n", dest); // 拼接后的字符串: Hello, Woreturn 0;
}

模拟实现strncat 

#include <stdio.h>char* strncat_sim(char* dest, const char* src, size_t n) {char* dest_start = dest; // 保存目标字符串的起始位置// 遍历目标字符串,直到达到结尾while (*dest != '\0') {dest++;}// 将源字符串中的字符逐个拼接到目标字符串中,直到达到指定的字符数 n 或源字符串结尾while (n > 0 && *src != '\0') {*dest = *src;dest++;src++;n--;}*dest = '\0'; // 添加结尾标记return dest_start; // 返回目标字符串的起始位置
}int main() {char dest[20] = "Hello";const char* src = ", World!";size_t n = 7;printf("目标字符串: %s\n", dest); // 目标字符串: Helloprintf("源字符串: %s\n", src);   // 源字符串: , World!printf("拼接的字符数: %zu\n", n); // 拼接的字符数: 7strncat_sim(dest, src, n);printf("拼接后的字符串: %s\n", dest); // 拼接后的字符串: Hello, Woreturn 0;
}

strncmp

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

  1. 比较字符串: 函数可以比较两个字符串的前n个字符,n由调用函数时指定。
  2. 返回值: 如果 s1 小于 s2,函数返回一个负值;如果 s1 大于 s2,函数返回一个正值;如果两个字符串在前n个字符内相等,函数返回0。
  3. 字符串结束判断: 与标准库中的strncmp类似,如果某个字符串的前n个字符中包含了'\0'(即字符串结束符),则仅比较到该结束符为止。

示例

#include <stdio.h>
#include <string.h>int main() {const char* str1 = "Hello";const char* str2 = "Hell";int n = 4;int result = strncmp(str1, str2, n);if (result == 0) {printf("两个字符串相等\n");} else if (result < 0) {printf("str1 小于 str2\n");} else {printf("str1 大于 str2\n"); // str1 大于 str2}return 0;
}

模拟实现strncmp

#include <stdio.h>int custom_strncmp(const char *s1, const char *s2, size_t n) {for (size_t i = 0; i < n; i++) {if (s1[i] != s2[i]) {return (s1[i] - s2[i]);}if (s1[i] == '\0') {return 0;  // 达到了字符串结尾}}return 0;  // 前 n 个字符均相同
}int main() {const char *s1 = "Hello";const char *s2 = "Hell";int result = custom_strncmp(s1, s2, 4);if (result < 0) {printf("s1 小于 s2\n");} else if (result > 0) {printf("s1 大于 s2\n"); // s1 大于 s2} else {printf("s1 等于 s2\n");}return 0;
}

字符串查找

strstr

查找小串在大串是否出现,返回出现小串往后的字符

char* strstr(const char* haystack, const char* needle);

  1. 主要用途:strstr() 函数经常用于在字符串中查找子串,例如查找某个单词在文本中的位置。
  2. 区分大小写:strstr() 是区分大小写的,即输入的字符串要求大小写完全匹配。
  3. 返回的指针:如果找到了 needle 字符串在 haystack 中的位置,返回的指针指向首次出现的子串;如果未找到,返回 NULL。

示例

    char email[] = "zpw@example.com.demo";char substr[] = "example.com";char *res = strstr(email, substr);if (res == NULL){printf("子串不存在\n");}else{printf("%s", res); // example.com.demo}

模拟实现strstr

char *my_strstr(const char *str1, const char *str2)
{assert(str1 && str2);const char *s1 = str1; // 负责找大串const char *s2 = str2; // 负责找小串const char *p = str1;  // 每次大串的起始点while (*p){s1 = p;s2 = str2;/* 大小串都没结束,并且当前大小串的字符相等则进入 */while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;}/* 如果是因为 小串结束没有再次进到上面循环,那么说明大串中成功找到小串 */if (*s2 == '\0'){return (char *)p;}/* 大串结束了,或者大小串当前字符不相等都会走到这里,则继续++大串的起始查找点,开始下一轮 */p++;}return NULL;
}char email[] = "zpw@example.com.demo";
char substr[] = "example.com";
char *p = my_strstr(email, substr);
printf("%s\n", p); // example.com.demo

strtok

分割字符串

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

  1. sep参数是个字符串,定义了用作分隔符的字符集合
  2. 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
  3. strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
  4. strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  5. strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  6. 如果字符串中不存在更多的标记,则返回 NULL 指针。

示例

    const char *sep = "@.";char eml[] = "zhanghai@bitejiuyeke.com.net";char cp[40] = {0};strcpy(cp, eml);char *ret = NULL;for (ret = strtok(cp, sep); ret != NULL; ret = strtok(NULL, sep)){/*zhanghaibitejiuyekecomnet*/printf("%s\n", ret);}

模拟实现strtok

#include <stdio.h>
#include <string.h>char* custom_strtok(char* str, const char* delim) {static char* remaining = NULL;if (str != NULL) {remaining = str;}// 跳过开头的分隔符while (*remaining != '\0' && strchr(delim, *remaining) != NULL) {remaining++;}if (*remaining == '\0') {return NULL;}char* token = remaining;remaining = strpbrk(remaining, delim);if (remaining != NULL) {*remaining = '\0';remaining++;}return token;
}int main() {char str[] = "Hello World! This is a test.";char delim[] = " ";char* token = custom_strtok(str, delim);while (token != NULL) {/*HelloWorld!Thisisatest.*/printf("%s\n", token);token = custom_strtok(NULL, delim);}return 0;
}

错误信息报告

strerror

char * strerror ( int errnum );

示例 

在这个示例中,我们尝试打开一个不存在的文件。由于文件不存在,fopen函数将返回NULL。然后,我们使用errno变量获取最近一次错误的错误码,传递给strerror函数。strerror函数将错误码转换为对应的错误信息字符串。

在这里,strerror(errno)将返回"No such file or directory",因为我们尝试打开一个不存在的文件。我们通过printf函数将错误信息打印到控制台上。

#include <stdio.h>
#include <string.h>
#include <errno.h>int main() {FILE* file = fopen("nonexistent_file.txt", "r");if (file == NULL) {printf("Failed to open file: %s\n", strerror(errno));}return 0;
}

字符分类函数

相关文章:

C语言 字符函数汇总,模拟实现各字符函数(炒鸡详细)

目录 求字符串长度 strlen 示例 模拟实现strlen 长度不受限制的字符串函数 strcpy 示例 模拟实现strcpy strcat 模拟实现strcat strcmp 示例 模拟实现strcmp 长度受限制的字符串函数介绍 strncpy 示例 模拟实现strncpy strncat 示例 模拟实现strncat s…...

微积分在神经网络中的本质

calculus 在一个神经网络中我们通常将每一层的输出结果表示为&#xff1a; a [ l ] a^{[l]} a[l] 为了方便记录&#xff0c;将神经网络第一层记为&#xff1a; [ 1 ] [1] [1] 对应的计算记录为为&#xff1a; a [ l ] &#xff1a; 第 l 层 a [ j ] &#xff1a; 第 j 个神经…...

CentOS部署Skywalking

一、安装Docker #yum -y install gcc #yum -y install gcc-c #yum install -y yum-utils 设置国内的镜像仓库 #yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新yum软件包索引 #yum makecache fast 安装Docker引擎 #yum …...

window上Clion配置C++版本的opencv

window上Clion配置opencv 注意版本一定要对的上&#xff0c;否则可能会出错&#xff0c;亲测 widnows 11mingw 8.1.0opencv 4.5.5 mingw8.1下载地址https://sourceforge.net/projects/mingw/ 配置环境变量 cmake下载 安装完添加环境变量 来到官网&#xff0c;下载 windows 对…...

FPGA时序分析与约束(14)——虚拟路径

一、概述 到目前为止&#xff0c;我们已经看到了如何约束时钟和端口来指定设计中的时序要求&#xff0c;我们可以通过这些基础的约束命令来进行时序约束&#xff0c;但是时序分析工具默认的时序检查方式可能和我们实际工程实现的情况不同&#xff0c;通常来说是约束过紧&#x…...

【Python】解析CPP类定义代码,获取UML类图信息

参考 & 鸣谢 CppHeaderParser - 官方文档Python解析C头文件win10直接获得文件绝对路径的方法总结 目的 解析CPP头文件中的类定义&#xff0c;获取UML中的属性。用于画UML类图。如下所示格式&#xff0c;图片来源-链接 即获取&#xff0c;类名&#xff0c;成员函数&#x…...

Docker存储驱动之- overlay2

docker支持多种graphDriver&#xff0c;包括vfs、devicemapper、overlay、overlay2、aufs等等&#xff0c;其中最常用的就是aufs了&#xff0c;但随着linux内核3.18把overlay纳入其中&#xff0c;overlay的地位变得更重&#xff0c;最近也在自己的虚拟机上用overlay2作为docker…...

Vue3 shallowRef 和 shallowReactive

一、shallowRef 使用shallowRef之前需要进行引入&#xff1a; import { shallowRef } from vue; 使用方法和ref 的使用方法一致&#xff0c;以下是二者的区别&#xff1a; 1. 如果ref 和 shallowRef 都传入的是普通数据类型的数据&#xff0c;那么他们的效果是一样的&#x…...

Python数据分析实战① Python实现数据可视化

文章目录 一、数据可视化介绍二、matplotlib和pandas画图1.matplotlib简介和简单使用2.matplotlib常见作图类型3.使用pandas画图4.pandas中绘图与matplotlib结合使用 三、订单数据分析展示四、Titanic灾难数据分析显示 一、数据可视化介绍 数据可视化是指将数据放在可视环境中…...

ASP.NET 开发几个知识点

1、 皮肤设定&#xff1a; 项目右键&#xff0c;建立皮肤 app_themes 文件夹&#xff0c;右键 建立 web from 皮肤文件&#xff0c; 设定皮肤样式。全局使用皮肤 web.config 增加 <pages styleSheetTheme"Skin1" /> &#xff0c;或在 具体页面 头 增加 sty…...

企业微信H5开发遇到的坑

企业微信官方推荐wx.agentConfig引用<script src"https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>是没有效果的 必须引用以下代码才有效果&#xff0c;这也是我看了社区的回答才有所收获&#xff0c;是一个坑 且VUE引用在线的…...

mysql使用--分组查询

1.分组数据 _1.复杂的数据统计 如&#xff1a;SELECT AVG(score) FROM student_score WHERE subject ‘Mysql是怎样运行的’; 上述实现查询指定课程的平均成绩。对FROM得到的结果集1&#xff0c;通过WHER进一步过滤得到结果集2。对结果集2中每一行执行汇总计算。 _2.创建分组 …...

Android网络模块基本实现步骤

Android网络模块主要是用于访问网络和获取数据&#xff0c;下面是网络模块的基本实现步骤&#xff1a; 选择网络框架&#xff1a;Android中常用的网络框架有HttpURLConnection、OkHttp、Volley和Retrofit等。最新的版本已经支持使用Kotlin协程完成网络请求&#xff0c;可以根据…...

Rust6.2 An I/O Project: Building a Command Line Program (mini_grep)

Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 12: An I/O Project: Building a Command Line Program project: minigrep src/main.r…...

云轴科技ZStack信创云平台支撑长江航务管理局35套航运管理系统

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…...

Canal+Kafka实现MySQL与Redis数据同步(一)

CanalKafka实现MySQL与Redis数据同步&#xff08;一&#xff09; 前言 在很多业务情况下&#xff0c;我们都会在系统中加入redis缓存做查询优化。 如果数据库数据发生更新&#xff0c;这时候就需要在业务代码中写一段同步更新redis的代码。 这种数据同步的代码跟业务代码糅合…...

集合的运算

集合的运算 #include <stdio.h> #include <stdlib.h> void print(int size, char arr[]) {if (size 0) {printf("null");}for (int i 0; i < size; i) {printf("%c", arr[i]);}printf("\n"); } int main() {char U[] { a,b,c,…...

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述 查询mysql数据库&#xff0c;按每5分钟分组获取3个小时内的电量数据&#xff0c;参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…...

什么是AIGC

1 定义 "AIGC"代表“人工智能生成内容”&#xff08;Artificial Intelligence Generated Content&#xff09;&#xff0c;它指的是使用人工智能&#xff08;AI&#xff09;技术自动生成的内容&#xff0c;这些内容可以包括文本、图像、音乐、视频或其他多媒体形式。…...

〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

GitHub 是全球领先的软件开发和协作平台&#xff0c;数百万开发者和企业在此分享、学习和创建卓越的软件。同时 GitHub 处在 AI 技术前沿&#xff0c;通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命。在今天的文章中&#xff0c;我们将一起看看在 GitHub 年度大会…...

数据结构:红黑树的插入实现(C++)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 一、红黑树二、红黑树的插入三、代码实现总结 一、红黑树 红黑树的概念&#xff1a; 红黑树是一颗二叉搜索树&#xff0c;但在每个节点上增加一个存储位表示节点的颜色&…...

飞天使-django之数据库简介

文章目录 增删改查解决数据库不能存储中文问题创建表数据类型表的基本操作主键唯一键 unique外键实战 增删改查 四个常用的语句查询 : insert delete update select insert into student(Sno,name) values(95001,"张三") delete from student where name张三 upda…...

Flink之KeyedState

前面的文章中介绍过Operator State,这里介绍一下Keyed State. 在使用Operator State时必须要实现CheckpointFunction接口,而Keyed State则不需要,在使用keyBy(...)分组分组后,调用的函数必须是实现RichFuntion接口的函数才可以使用Keyed State.同样使用Keyed State也必须开启Ch…...

c语言:模拟实现qsort函数

qsort函数的功能&#xff1a; qsort相较于冒泡排序法&#xff0c;不仅效率更快&#xff0c;而且能够比较不同类型的元素&#xff0c;如&#xff1a;浮点数&#xff0c;结构体等等。这里我们来模拟下qsort是如何实现这一功能的&#xff0c;方便我们对指针数组有一个更深层次的理…...

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构&#xff1f; 数据结构是带有结构特性的数据元素的集合&#xff0c;它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…...

VSCode 使用CMakePreset找不到cl.exe编译器的问题

在用vscode开发c项目的时候&#xff0c;使用预先配置的CMakePresets.json可以把一些特定的cmake选项固定下来&#xff0c;在配置时直接使用 "cmake --config --preset presetname"就可以进行配置&#xff0c;免去在命令行输入过多的配置参数。 但是在vscode中&#…...

【Linux系统化学习】进程的状态 | 僵尸进程 | 孤儿进程

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 目录 操作系统进程的状态 运行状态 阻塞状态 进程阻塞的现象 挂起阻塞状态 Linux进程状态 Linux内核源代码怎么说 R&#xff08;running状态&#xff09;运行状态 S&#xff08;sl…...

深信服AC流量管理技术

拓扑图 一.保证通道针对修仙部&#xff0c;访问网站&#xff0c;邮件&#xff0c;DNS&#xff0c;IM&#xff0c;办工 OA&#xff0c;微博论坛网上银行等常见应用保证带宽最低 50%&#xff0c;最高 100% 1. 先新建线路带宽 2.新增流量管理通道&#xff08;保证关键应用&#x…...

二元关系及关系代数中的象集、除运算

二元关系及关系代数中的象集、除运算 数学上&#xff0c;二元关系用于讨论两个数学对象的联系。诸如算术中的「大于」及「等于」&#xff0c;几何学中的"相似"&#xff0c;或集合论中的"为...之元素"或"为...之子集"。二元关系有时会简称关系&a…...