(c语言进阶)字符串函数、字符分类函数和字符转换函数
一.求字符串长度
1.strlen()
(1)基本概念
头文件:<string.h>
(2)易错点:strlen()的返回值为无符号整形
#include<stdio.h>
#include<string.h>
int main()
{const char* str1 = "abcdef";const char* str2 = "bbb";printf("%u\n", strlen(str2) - strlen(str1));printf("%d\n", strlen(str2) - strlen(str1));return 0;
}
两个strlen函数的返回值相减,得到的结果为无符号整数的形式
#include<stdio.h>
#include<string.h>
int main()
{const char* str1 = "abcdef";const char* str2 = "bbb";if (strlen(str2) - strlen(str1) > 0){printf(">\n");}else{printf("<\n");}return 0;
}
(3)模拟实现
#include<stdio.h>
#include<string.h>
size_t my_strlen(const char* str1)
{size_t count=0;while (*str1++){count++;}return count;
}
int main()
{const char* str1 = "abcdef";size_t len=my_strlen(str1);printf("%u",len);return 0;
}
二.长度不受限制的字符串函数
1.strcpy()——将源字符串复制给目标字符串
(1)基本概念
头文件:<string.h>
#include<stdio.h>
#include<string.h>
int main()
{char name[20] = {0};//目标字符串的空间要足够大,否则会出现数组越界现象char arr[20] = "hhhhhhhhhh";strcpy(name,arr);//arr为字符串首元素的地址//strcpy(目标字符串首元素地址,字符串常量首元素地址)//'\0'也会被复制到目标字符串printf("%s\n",name);strcpy(name,"ycy");printf("%s",name);return 0;
}
(2)易错点:目标空间不够大时,字符串的复制还是会进行,代价是通过数组越界来实现的
(3)模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* name,char* arr)
{assert(name&&arr);char* p = name;while (*name++=*arr++) //赋值语句的返回值为左操作数的值,当*arr将'\0'赋值给*name时结束循环{}return p;
}
int main()
{char name[20] = {0};char arr[20] = "hhhhhhhhhh";my_strcpy(name,arr);printf("%s",name);return 0;
}
2.strcat()——字符串追加
(1)基本概念
头文件<string.h>
(2)模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcat(char* arr1,char* arr2)
{char* p = arr1;//将地址移动至\0处while (*arr1){arr1++;}//从\0处开始拷贝arr2//h e l l o \0——arr1// w o r l d \0——arr2//h e l l o w o r l d \0 ——追加后的arr1while (*arr1++ = *arr2++){}return p;
}
int main()
{char arr1[20] = "hello";char arr2[20] = " world";my_strcat(arr1,arr2);printf("%s",arr1);return 0;
}
3.strcmp()——字符串比较
(1)基本概念
头文件<string.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello";char arr2[20] = "world";int p=strcmp(arr1,arr2);//strcmp函数会将两个字符串的每个字符依次比较//若出现不相等则停止比较//前一个操作符的元素大于后一个操作符的元素,则会输出一个大于零的整数//前一个操作符的元素小于后一个操作符的元素,则会输出一个小于零的整数、//等于则输出0if (p > 0){printf("arr1>arr2\n");}else if (p == 0){printf("arr1==arr2\n");}else{printf("arr1<arr2\n");}return 0;
}
(2)模拟实现
include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(char* arr1,char* arr2)
{assert(arr1&&arr2);while (*arr1==*arr2) //相同的情况下,判断下一位是否也相同,不相同则退出循环{if (*arr1=='\0'||*arr2=='\0') //若有其中一个字符串到达末尾,则退出循环{break;}arr1++;arr2++;}return *arr1 - *arr2; //不相同则相减返回差值
}
int main()
{char arr1[20] = "hello";char arr2[20] = "hello";int p=my_strcmp(arr1,arr2);if (p > 0){printf("arr1>arr2\n");}else if (p == 0){printf("arr1==arr2\n");}else{printf("arr1<arr2\n");}return 0;
}
三.长度受限制的字符串函数介绍
1.strncpy() ——可控制,复制字符串元素
(1)基本概念
头文件<string.h>
#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = "abcdef";char arr2[] = "bit";strncpy(arr1,arr2,3);printf("%s\n",arr1);return 0;
}
(2)易错点:当要复制的元素个数大于原字符串时,多出来的位置会用\0代替
#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = "abcdef";char arr2[] = "bit";strncpy(arr1,arr2,5);printf("%s\n",arr1);return 0;
}
(3)模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strncpy(char* arr1,char* arr2,size_t x)
{assert(arr1&&arr2); char *p= arr1;int i;int len = strlen(arr2);for (i = 0; i < x; i++){if (i>len){*arr1++ = '\0';}else{*arr1++ = *arr2++;}}return p;
}
int main()
{char arr1[20] = "abcdef";char arr2[] = "bit";my_strncpy(arr1,arr2,5);printf("%s\n",arr1);return 0;
}
2.strncat()——可控制,链接字符串元素
(1)基本概念
头文件<string.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello";char arr2[] = "bit";strncat(arr1,arr2,3);printf("%s\n",arr1);return 0;
}
(2)易错点:需要链接的元素个数小于原字符串时,会在链接相应数量元素的同时多链接一个'\0' .元素个数大于原字符串时,不会用'\0'填补
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello";char arr2[] = "bit";strncat(arr1,arr2,5);printf("%s\n",arr1);return 0;
}
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello";char arr2[] = "bit";strncat(arr1,arr2,1);printf("%s\n",arr1);return 0;
}
(3)模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strncat(char* arr1,char*arr2,size_t x)
{assert(arr1&&arr2);int len = strlen(arr2);char* p = arr1;while (*arr1 != '\0'){arr1++;}if (x >= len){while (*arr2){*arr1++ = *arr2++;}}else{for (int i = 0; i < x; i++){*arr1++ = *arr2++;}*arr1 = '\0';}return p;
}
int main()
{char arr1[20] = "hello";char arr2[] = "bit";my_strncat(arr1,arr2,5);printf("%s\n",arr1);return 0;
}
3.strncmp()——可控制,比较字符串元素
(1)基本概念
头文件<string.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello";char arr2[] = "bit";int ret=strncmp(arr1,arr2,3);if (ret > 0){printf("arr1>arr2");}else if (ret == 0){printf("arr1==arr2");}else{printf("arr1<arr2");}return 0;
}
四.字符串查找
1.strstr()——在一个字符串中查找另一个字符串是否存在
(1)基本概念
头文件<string.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{char arr1[20] = "hello bit world";char arr2[] = "bit";char*ret = strstr(arr1,arr2);//ret为寻找到字串位置的首地址if (ret == NULL){printf("所寻找的子串不存在\n");}else{printf("%s",ret);//从地址处往后输出}return 0;
}
(2)模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
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 p; //返回查找到的首地址}p++; //若查找途中存在不相同的,则被查找字符串指针向后一位}return NULL;
}
int main()
{char arr1[20] = "hello bit world";char arr2[] = "bit";char* ret = my_strstr(arr1, arr2);//ret为寻找到字串位置的首地址if (ret == NULL){printf("所寻找的子串不存在\n");}else{printf("%s", ret);//从地址处往后输出}return 0;
}
2.strtok()——切割字符串
(1)基本概念
头文件<string.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{const char* sep = '@'; //分隔符char email[] = "zhangpengwei@bietejieyeke.com"; //被分割的字符串strtok(email,sep); //因为strtok函数会将遇到的第一个分隔符改为'\0',
//并返回分隔符的指针,将改变原有字符串
//__________________________________________________________________________________//若不想原有字符串被改变则采用如下操作char cp[] = {0};strcpy(cp,email);strtok(cp,sep);return 0;
}
(2)简单应用
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{const char* sep = "@."; //分隔符char email[] = "zhangpengwei@bietejieyeke.com"; //被分割的字符串char cp[30] = {0};strcpy(cp,email); //strtok函数有记忆功能,执行完后会保存上一个分隔符的地址,下一次调用时从该地址往后查找char* ret=strtok(cp,sep);printf("%s\n",ret);ret = strtok(NULL,sep); //所以除第一次调用,多次调用时不需要传入参数,所以传入NULLprintf("%s\n", ret);ret = strtok(NULL, sep);printf("%s\n", ret);return 0;
}
(3)优化
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{const char* sep = "@."; //分隔符char email[] = "zhangpengwei@bietejieyeke.com"; //被分割的字符串char cp[30] = {0};strcpy(cp,email); char* ret = NULL;for (ret = strtok(cp, sep); ret != NULL; ret=strtok(NULL, sep)){printf("%s\n",ret);}return 0;
}
五.错误信息报告
1.strerror()——返回错误码所对应的错误信息
(1)基本概念
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{//c语言的库函数在执行失败的时候,都会设置相应的错误码//0 1 2 3 4 5 6 7 8 ......//strerror()可以返回错误码所对应的错误信息printf("%s\n", strerror(1));printf("%s\n", strerror(2));printf("%s\n", strerror(3));printf("%s\n", strerror(4));printf("%s\n", strerror(5));printf("%s\n", strerror(6));printf("%s\n", strerror(7));printf("%s\n", strerror(8));return 0;
}
(2)简单应用
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<errno.h>
int main()
{//打开文件的函数为fopen()//"r"表示以读的形式打开//返回的是FILE型的指针,如果打开失败会返回空指针(NULL)FILE* pf = fopen("text.txt","r");//若打开的文件在程序路径下,可以使用相对路径(文件名)fopen("C:\\Users\\admin\\Desktop\\text2.text","r");//在其他位置要使用绝对路径,单个'\'会被识别为转义字符,所以要再加一个'\'//打开文件失败后,fopen函数会将错误码存储在errno中//errno—C语言设置的一个全局的错误码存储变量//只要发生错误,都会把错误码存在errno中—始终记录最新的错误码//调用errno需要应用头文件<errno.h>if (pf == NULL){printf("%s", strerror(errno));}return 0;
}
六.字符分类函数 ——头文件<ctype.h>
重点:应用
举例:isspace()——判断空白字符
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{printf("%d\n", isspace('x'));printf("%d\n", isspace(' '));return 0;
}
1、iscntrl()——判断是否是控制字符(任何控制字符)
功能
判断是否是控制字符(任何控制字符)
返回值
若返回值为非0数字,则为控制字符,若返回0,则不是控制字符。
2、isspace()——判断是否是空白字符
功能:
判断是否是空白字符(空格、换页/f、换行\n,回车\r,制表符\t或者垂直制表符\v)
返回值:
若返回值为非0数字,则为空白字符,若返回0,则不是空白字符。
3、isdigit()——判断是否是十进制数字字符
功能:
判断是否是十进制数字字符(0-9)
返回值:
若返回值为非0数字,则为十进制数字字符,若返回0,则不是十进制数字字符。
4、isxdigit()——判断是否是十六进制数字字符
功能:
判断是否是十六进制数字字符(包括所有十进制数字,小写字母a-f,大写字母A-F)
返回值:
若返回值为非0数字,则为十六进制字符,若返回0,则不是控制字符。
5、islower()——判断是否是小写字母
功能:
判断是否是小写字母(a-z)
返回值:
若返回值为非0数字,则为小写字母字符,若返回0,则不是小写字母字符
6、isupper()——判断是否是大写字母
功能:
判断是否是大写字母(A-Z)
返回值:
若返回值为非0数字,则为大写字母字符,若返回0,则不是大写字母字符。
7、isalpha()——判断是否是字母字符
功能:
判断是否是字母字符(a-z或A-Z)
返回值:
返回值为非0数字则为控制字符,返回0则不是控制字符。
8、isalnum()——判断是否是字母字符或者数字字符
功能:
判断是否是字母字符或者数字字符(a-z、A-Z、0-9)
返回值:
若返回值为非0数字,则为字母字符或数字字符,若返回0,则不是字母字符或数字字符。
9、ispunct()——判断是否是标点符号字符
功能:
判断是否是标点符号字符(任何不属于数字或字母的图形字符)
返回值:
若返回值为非0数字,则为标点符号,若返回0,则不是标点符号。
10、isgraph()——判断是否是图形字符
功能:
判断是否是图形字符(任何图形字符)
返回值:
若返回值为非0数字,则为图形字符,若返回0,则不是图形字符。
11、isprint()——判断是否是可打印字符
功能:
判断是否是可打印字符(包括图形字符和空白字符)
返回值:
若返回值为非0数字,则为可打印字符,若返回0,则不是可打印字符。
七.字符转换函数
1.tolower(int c) ——字符转小写
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{printf("%c\n",tolower('H'));return 0;
2.toupper(int c) ——字符转大写
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{printf("%c\n",toupper('h'));return 0;
相关文章:

(c语言进阶)字符串函数、字符分类函数和字符转换函数
一.求字符串长度 1.strlen() (1)基本概念 头文件:<string.h> (2)易错点:strlen()的返回值为无符号整形 #include<stdio.h> #include<string.h> int main() {const char* str1 "abcdef";const char* str2 "bbb&q…...

解决MySQL大版本升级导致.Net(C#)程序连接报错问题
数据库版本从MySQL 5.7.21 升级到 MySQL8.0.21 数据升级完成后,直接修改程序的数据库连接配置信息 <connectionStrings> <add name"myConnectionString" connectionString"server192.168.31.200;uidapp;pwdFgTDkn0q!75;databasemail;&q…...
Java 将对象List转为csv文件并上传远程文件服务器实现方案
问题情景: 最近项目中遇到了根据第三方系统传递过来的参数,封装为List<实体类对象>后,将该实体类转换为csv文件,然后上传到远程的sftp服务器指定目录的需求。 实现思路: List<实体类对象>转为csv文件的…...

分享8个分布式Kafka的使用场景
Kafka 最初是为海量日志处理而构建的。它保留消息直到过期,并让消费者按照自己的节奏提取消息。与它的前辈不同,Kafka 不仅仅是一个消息队列,它还是一个适用于各种情况的开源事件流平台。 1. 日志处理与分析 下图显示了典型的 ELK࿰…...
【再见了暗恋对象 朋友们看完之后的一些感悟】
【再见了暗恋对象】写完之后魏野是我的第一个读者,魏野的反应是:这就是青春啊,喜欢了一个不喜欢自己的人而且男生觉得很困扰女孩子喜欢被牵引着走,但是男孩子牵引就是因为不喜欢这个女孩子,好可怜!青春就这…...
JSON和Protobuf序列化
文章目录 一、粘包和拆包1、半包问题2、半包现象原理 二、JSON协议通信1、通用类库2、JSON传输的编码器和解码器 三、Protobuf协议通信1、一个简单的proto文件的实践案例2、生成POJO和Builder3、消息POJO和Builder的使用案例1)构造POJO消息对象2)序列化和…...

lambda表达式 - c++11
文章目录: lambda表达式概念lambda表达式语法函数对象与lambda表达式 lambda表达式概念 lambda 表达式是 c11 中引入的一种匿名函数,它可以在需要函数对象的地方使用,可以用作函数参数或返回值。lambda 表达式可以看作是一种局部定义的函数对…...
509. 斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n > 1给定 n &a…...

四、[mysql]索引优化-1
目录 前言一、场景举例1.联合索引第一个字段用范围查询不走索引(分情况)2.强制走指定索引3.覆盖索引优化4.in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描5.like 后% 一般情况都会走索引(索引下推) 二、Mysql如何选择合适的索…...
PyTorch入门学习(九):神经网络-最大池化使用
目录 一、数据准备 二、创建神经网络模型 三、可视化最大池化效果 一、数据准备 首先,需要准备一个数据集来演示最大池化层的应用。在本例中,使用了CIFAR-10数据集,这是一个包含10个不同类别图像的数据集,用于分类任务。我们使…...

0基础学习PyFlink——用户自定义函数之UDF
大纲 标量函数入参并非表中一行(Row)入参是表中一行(Row)alias PyFlink中关于用户定义方法有: UDF:用户自定义函数。UDTF:用户自定义表值函数。UDAF:用户自定义聚合函数。UDTAF&…...

英语小作文模板(06求助+描述;07描述+建议)
06 求助描述: 题目背景及要求 第一段 第二段 第三段 翻译成中文 07 描述+建议: 题目背景及要求 第一段 第二段...
为什么感觉假期有时候比上班还累?
假期比上班还累的感觉可能由以下几个原因造成: 计划过度:在假期里,人们往往会制定各种计划,如旅游、聚会、休息等,以充分利用这段时间。然而,如果这些计划过于紧张或安排得过于紧密,就会导致身…...

推理还是背诵?通过反事实任务探索语言模型的能力和局限性
推理还是背诵?通过反事实任务探索语言模型的能力和局限性 摘要1 引言2 反事实任务2.1 反事实理解检测 3 任务3.1 算术3.2 编程3.3 基本的句法推理3.4 带有一阶逻辑的自然语言推理3.5 空间推理3.6 绘图3.7 音乐3.8 国际象棋 4 结果5 分析5.1 反事实条件的“普遍性”5…...

《利息理论》指导 TCP 拥塞控制
欧文费雪《利息原理》第 10 章,第 11 章对利息的几何说明是普适的,任何一个负反馈系统都能引申出新结论。给出原书图示,本文依据于此,详情参考原书: 将 burst 看作借贷是合理的,它包含成本(报文)…...
Bsdiff,Bspatch 的差分增量升级(基于Win和Linux)
目录 背景 内容 准备工作 在windows平台上 在linux平台上 正式工作 生成差分文件思路 作用差分文件思路 在保持相同目录结构进行差分增量升级 服务端(生成差分文件) 客户端(作用差分文件) 背景 像常见的Android 的linux平台,游戏,系统更新都…...

【3妹教我学历史-秦朝史】2 秦穆公-韩原之战
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:2哥,今天下班这么早&#…...
车载控制器
文章目录 车载控制器电动汽车上都有什么ECU 车载控制器 智能汽车上的控制器数量因车型和制造商而异。一般来说,现代汽车可能有50到100个电子控制单元(ECU)或控制器。这些控制器负责管理各种系统,如发动机管理、刹车、转向、空调、…...

回归预测 | Matlab实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测
回归预测 | Matlab实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.RIME-CNN-SVM霜冰优化算…...

使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...