【C语言系列】字符函数和字符串函数
字符函数和字符串函数
- 一、字符分类函数
- 二、字符转换函数
- 三、strlen的使用和模拟实现
- 3.1strlen函数
- 3.2strlen函数模拟实现
- 四、strcpy的使用和模拟实现
- 4.1strcpy函数
- 4.2strcpy函数的模拟实现
- 五、strcat的使用和模拟实现
- 5.1strcat函数
- 5.2strcat函数的模拟实现
- 六、strcmp的使用和模拟实现
- 6.1strcmp函数
- 6.2strcmp函数的模拟实现
- 七、strncpy函数的使用
- 7.1strncpy函数
- 7.2strncpy函数的使用
- 八、strncat函数的使用
- 8.1strncat函数
- 8.2strncat函数的使用
- 九、strncmp函数的使用
- 9.1strncmp函数
- 9.2strncmp函数的使用
- 十、strstr的使用和模拟实现
- 10.1strstr函数
- 10.2strstr函数的模拟实现
- 十一、strtok函数的使用
- 11.1strtok函数
- 11.2strtok函数的使用
- 十二、strerror函数的使用
- 十三、总结
一、字符分类函数
C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的,这些函数的使用都需要一个头文件是:<ctype.h>。
函数 | 如果它的参数符合下列条件就返回真 |
---|---|
iscntrl | 任何控制字符 |
isspace | 空白字符:空格’ ‘,换页’\f’,换行’\n’,回车’\r’,制表符’\t’或者垂直制表符’\v’ |
isdigit | 十进制数字’0’~'9’字符 |
isxdigit | 十六进制数字,包括所有十进制数字字符,小写字母a~f,大写字母A ~ F |
islower | 小写字母a~z |
isupper | 大写字母A~Z |
isalpha | 字母a~z或者A ~ Z |
isalnum | 字母或者数字,a~z,A ~ Z,0 ~ 9 |
ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
isgraph | 任何图形字符 |
isprint | 任何可打印字符,包括图形字符和空白字符 |
上面的函数使用方法非常类似,所以下面我们讲解一个函数,其他函数与其相似,就能很快的理解了。
例子:int islower(int D);
#include <stdio.h>
#include <ctype.h>
int main()
{
int ret = islower('A');//判断参数部分是否为小写字母,是返回非0,否则返回0
printf("%d\n",ret);//0
return 0;
}
用过上述代码我们了解到了islower函数的用法,那么我们也就了解了上表的函数,是非常类似的。
下面我们做一个练习:
写一个代码,将字符串中的小写字母转大写,其他字符不变。
代码如下:
#include <stdio.h>
#include <ctype.h>
int main()
{
char arr[] = "I Am a Student";
int i = 0;
while(arr[i] != '\0')
{
//if(arr[i] >= 'a' && arr[i] <= 'z')
if(islower(arr[i]))
{
arr[i] -= 32;//arr[i] = toupper(arr[i]);
}
i++;
}
printf("%s\n",arr);
return 0;
}
二、字符转换函数
C语言提供了2个字符转换函数:
//头文件是<ctype.h>
int tolower(int c);//将参数传进去的大写字母转小写
int toupper(int c);//将参数传进去的小写字母转大写
上面的代码是通过-32来转换的,接下来我们用函数toupper来实现小写字母转大写字母,这样看起来更简单了。
#include <stdio.h>
#include <ctype.h>
int main ()
{
int i = 0;
char str[] = "Test String.\n";
char c;
while (str[i])
{
c = str[i];
if (islower(c))
c = toupper(c);
putchar(c);
i++;
}
return 0;
}
三、strlen的使用和模拟实现
要理解strlen的使用和模拟实现首先要看看其函数原型,函数原型如下:
size_t strlen ( const char * str );
注:字符串以’\0’作为结束的标志。
3.1strlen函数
1.strlen函数求的是字符串的长度,统计的是字符串中\0之前的字符的个数,字符串中必须有\0。
2.函数返回类型为size_t,是无符号的。
3.strlen函数的使用必须包含头文件 <string.h>。
#include <stdio.h>
#include <string.h>
int main()
{
if(strlen("abc") - strlen("abcdef") > 0)//3-6,由于是无符号运算,所以结果会溢出变成一个非常大的正数。
{
printf(">\n");//执行
}
else
{
printf("<=\n");//不执行
}
return 0;
}
由于是无符号运算,结果会溢出变成一个非常大的正数,导致条件成立。
3.2strlen函数模拟实现
下面我们来进行strlen函数的模拟实现:
模拟实现:①计数器的方法②指针-指针③递归的方法
①计数器的方法
#include <assert.h>
int my_strlen(const char*str)
{
int count = 0;
assert(str);
while(*str)
{
count++;
str++;
}
return count;
}
②指针-指针的方法
#include <assert.h>
int my_strlen(char*s)
{
assert(str);
char*p = s;
while(*p != '\0')p++;
return p - s;
}
③递归的方法
#include <assert.h>
//不创建临时变量计数器
int my_strlen(const char*str)
{
assert(str);
if(*str == '\0')return 0;
elsereturn 1 + my_strlen(str + 1);
}
四、strcpy的使用和模拟实现
要理解strcpy的使用和模拟实现首先要看看其函数原型,函数原型如下:
char* strcpy(char * destination, const char * source );
该函数的作用是:对字符串的拷贝。
4.1strcpy函数
注:使用该函数必须包含头文件<string.h>
1.源字符串必须以’\0’结束。
2.会将原字符串中的’\0’拷贝到目标空间。
3.目标空间足够大。
4.目标空间可修改(常量字符串是不可被修改的!!!)。
下面我们看看它的使用举例:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "hello sun";
char arr2[20] = {0};
strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;
}
4.2strcpy函数的模拟实现
下面我们来进行strcpy函数的模拟实现:
代码如下:
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char*dest,const char*src)
{
assert(src != NULL);
assert(dest != NULL);
char*ret = dest;
//拷贝\0前面的内容
while(*dest++ = *src++)
{;
}
return ret;
}
int main()
{
char arr1[] = "hello sun";
char arr2[20] = "xxxxxxxxxxxxxxx";
my_strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;
}
运行结果如下图:
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char*dest,const char*src)
{
assert(src != NULL);
assert(dest != NULL);
char*ret = dest;
//拷贝\0前面的内容
while(*dest++ = *src++)
{;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = {0};
//arr2 = arr1;//不行的,为什么呢?因为数组名是地址,就是一个常量的值。
strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;
}
五、strcat的使用和模拟实现
要理解strcat的使用和模拟实现首先要看看其函数原型,函数原型如下:
char * strcat ( char * destination, const char * source );
5.1strcat函数
注:使用该函数必须包含头文件<string.h>
1.源字符串必须以’\0’结束。
2.目标字符串中也得有’\0’。
3.目标空间必须足够大,能容纳源字符串。
4.目标空间必须可修改(常量字符串是不可被修改的!!!)。
strcat函数是用来连接字符串的。
下面我们看看它的使用举例:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "hello";//hello world
char arr2[] = "world";
strcat(arr1,arr2);
printf("%s\n",arr1);
return 0;
}
5.2strcat函数的模拟实现
下面我们来进行strcat函数的模拟实现:
代码如下:
#include <stdio.h>
#include <string.h>
#include <assert.h>
char*my_strcat(char*dest,const char*src)
{
assert(dest&&src);
char*ret = dest;
//1、找到目标空间的\0
while(*dest!='\0')dest++;
//2、拷贝
while(*dest++ = *src++);//空语句
return ret;
}
int main()
{
char arr1[20] = "hello";//hello world
char arr2[] = "world";
char*s = my_strcat(arr1,arr2);
printf("%s\n",arr1);
printf("%s\n",s);
//printf("%s\n",my_strcat(arr1,arr2));
return 0;
}
运行结果如下图:
六、strcmp的使用和模拟实现
要理解strcmp的使用和模拟实现首先要看看其函数原型,函数原型如下:
int strcmp( const char *string1, const char *string2 );
6.1strcmp函数
注:使用该函数必须包含头文件<string.h>
strcmp:比较两个字符串的内容。
第⼀个字符串大于第⼆个字符串,则返回大于0的数字
第⼀个字符串等于第⼆个字符串,则返回0
第⼀个字符串小于第⼆个字符串,则返回小于0的数字
那么如何判断两个字符串? 比较两个字符串中对应位置上字符ASCII码值的大小。
下面我们看看它的使用举例:
#include <string.h>
#include <stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abq";
int ret = strcmp(arr1,arr2);
printf("%d\n",ret);//-1
return 0;
}
运行结果如下图:
6.2strcmp函数的模拟实现
下面我们来进行strcmp函数的模拟实现:
代码如下:
#include <assert.h>
int my_strcmp(const char*str,const char*str2)
{
assert(str1&&str2);
while(*str1 == *str2)
{
if(*str1 =='\0')return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
注:
七、strncpy函数的使用
要理解strncpy的使用和模拟实现首先要看看其函数原型,函数原型如下:
char *strncpy( char *strDest, const char *strSource, size_t count );
7.1strncpy函数
注:使用该函数必须包含头文件<string.h>
源字符串长度大于count,追加完之后就不再后加\0;如果源字符串长度大于count,在拷贝完源字符串后,后面追加\0,直到count个。
7.2strncpy函数的使用
strncpy函数的使用示例如下:
#include <string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[20] = "xxxxxxxxxxx";
strncpy(arr2,arr1,3);
printf("%s\n",arr2);
return 0;
}
八、strncat函数的使用
要理解strncat的使用和模拟实现首先要看看其函数原型,函数原型如下:
char * strncat ( char * destination, const char * source, size_t num );
8.1strncat函数
注:使用该函数必须包含头文件<string.h>
将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0 字符。
如果num大于destination,则添加完abcdef\0后就不再追加;
如果num小于destination,则添加num个后再追加一个\0。
8.2strncat函数的使用
strncat函数的使用示例如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[20] = "xx";
strncat(arr2,arr1,8);
printf("%s\n",arr2);
return 0;
}
运行结果如下图:
九、strncmp函数的使用
要理解strncmp的使用和模拟实现首先要看看其函数原型,函数原型如下:
int strncmp ( const char * str1, const char * str2, size_t num );
9.1strncmp函数
注:使用该函数必须包含头文件<string.h>
比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样,就提前结束,大的字符所在的字符串大于另外一个。如果num个字符都相等,就是相等返回0。
9.2strncmp函数的使用
strncmp函数的使用示例如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abqdefghi";
int ret = strncmp(arr1,arr2,6);
printf("%d\n",ret);//-1
return 0;
}
运行结果如下图:
十、strstr的使用和模拟实现
要理解strstr的使用和模拟实现首先要看看其函数原型,函数原型如下:
char * strstr ( const char * str1, const char * str2);
10.1strstr函数
注:使用该函数必须包含头文件<string.h>
strstr:在一个字符串中查找另一个字符串,函数返回字符串str2在str1中第一次出现的位置。
下面我们看看它的使用举例:
#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "this is an apple\n";//const char* p = "Appl";char arr2[] = "is";char* ret = strstr(arr1, arr2);if (ret != NULL){printf("%s\n", ret);}else{printf("找不到\n");}return 0;
}
运行结果如下图:
10.2strstr函数的模拟实现
下面我们来进行strstr函数的模拟实现:
代码如下:
char*my_strstr(const char*str1,const char*str2)
{
const char*s1 = NULL;
const char*s2 = NULL;
const char*cur = str1;
if(*str2 == '\0')return(char*)str1;
while(*cur)
{
s1 = cur;
s2 = str2;
while(*s1 != '\0'&& *s2 != '\0'&& *s1 ==*s2)
{
s1++;
s2++;
}
if(*s2 == '\0')
{
return (char*)cur;
}
cur++;
}
return NULL;
}
十一、strtok函数的使用
要理解strtok的使用和模拟实现首先要看看其函数原型,函数原型如下:
char * strtok ( char * str, const char * sep);
11.1strtok函数
注:使用该函数必须包含头文件<string.h>
1.sep函数指向一个字符串,定义了用作分隔符的字符集合。
2.第一个参数是指定一个字符串,它包含了0个或多个由sep字符串中一个或多个分隔符分割的标记。
3.strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针。(注:strtok函数会改变操作的字符串,所以被strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
4.strtok函数的第一个参数不为NULL,函数将找出str中第一个标记,strtok函数将保存它在字符串中的位置。
5.strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
11.2strtok函数的使用
下面我们来进行strstr函数的模拟实现:
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "sgenglei@yeah.net";
char arr2[30] = {0};//"sgenglei\0yeah\0net"
strcpy(arr2,arr);
const char*sep = "@.";
char*ret = NULL;
//ret = strtok(arr2,sep);
//printf("%s\n",ret);//sgenglei
//ret = strtok(NULL,sep);
//printf("%s\n",ret);//yeah
//ret = strtok(NULL,sep);
//printf("%s\n",ret);//net
for(ret = strtok(arr2,sep);ret!=NULL;ret = strtok(NULL,sep))
{
printf("%s\n",ret);
}
return 0;
}
运行结果如下图:
十二、strerror函数的使用
要理解strerror的使用和模拟实现首先要看看其函数原型,函数原型如下:
char * strerror ( int errnum );
strerror 函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
#include <errno.h>
#include <string.h>
#include <stdio.h>
//我们打印一下0~10这些错误码对应信息
int main()
{
int i = 0;
for(i = 0;i <= 10;i++)
{
printf("%s\n",strerror(i));
}
return 0;
}
在Windows11+VS2022环境下输出的结果如下图:
举例:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
//fopen以读的形式打开文件的时候,如果文件不存在,就打开失败。
FILE*pf = fopen("test.txt","r");
if(pf == NULL)
{
printf("%s\n",strerror(errno));
perror("zhangsan");//zhangsan:_(+)错误信息
return 1;
}
//读文件
//关闭文件
fclose(pf);
return 0;
}
perror有能力直接打印错误信息的,打印的时候,先打印传给perror的字符串,然后打印冒号,再打印空格,最后打印错误码对应的错误信息。
perror == printf + strerror。
‘0’ —— 字符0 —— ASCII码值是48
NULL —— 空指针 —— 0
‘\0’ —— 字符 —— ASCII码值是0
" " —— 空字符串
十三、总结
这篇文章详细介绍了 C 语言中关于字符处理和字符串操作的一些常用函数。文章主要分为字符分类函数、字符转换函数、字符串操作函数以及它们的模拟实现,帮助读者深入理解并掌握这些函数的使用方法。
首先,文章介绍了 C 语言中常用的字符分类函数,如 islower
、isdigit
、isspace
等,这些函数通常用于判断字符是否属于某一类(如数字、小写字母、空白字符等)。这些函数都包含在 <ctype.h>
头文件中,使用方法简洁且直观。例如,islower
用来判断一个字符是否为小写字母,isdigit
判断字符是否为数字,isalnum
判断字符是否为字母或数字。文章通过示例代码展示了如何使用这些函数,例如将字符串中的小写字母转换为大写字母。
接下来,文章介绍了两个常用的字符转换函数:tolower
和 toupper
。这两个函数分别用于将字符转换为小写字母或大写字母。文章通过简单的代码示例,展示了如何使用这些函数实现小写字母转大写字母的功能。
在字符串操作方面,文章详细讲解了 strlen
、strcpy
、strcat
、strcmp
等常用函数的使用方法及其模拟实现。strlen
用于获取字符串的长度,文章提醒我们注意字符串结尾的 \0
,并展示了模拟实现 strlen
函数的三种方法,包括计数器法、指针法和递归法。strcpy
和 strcat
分别用于字符串拷贝和连接,strcmp
用于比较两个字符串的大小,strncpy
和 strncat
则是它们的带长度限制版本,防止内存溢出。
此外,文章还介绍了 strstr
和 strtok
函数,分别用于在字符串中查找子字符串和按分隔符拆分字符串。这些函数的使用对于处理字符串的复杂操作非常有帮助。
最后,文章讲解了 strerror
函数,它能够根据错误码返回对应的错误信息,并展示了如何结合 perror
来输出更详细的错误信息。
总体来说,本文通过丰富的代码示例和详细的解释,帮助读者掌握了 C 语言中常见的字符串处理函数及其实际应用,增强了理解和编写字符串操作代码的能力。这些基础知识对于学习和使用 C 语言进行开发具有重要意义。
相关文章:
【C语言系列】字符函数和字符串函数
字符函数和字符串函数 一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2strlen函数模拟实现 四、strcpy的使用和模拟实现4.1strcpy函数4.2strcpy函数的模拟实现 五、strcat的使用和模拟实现5.1strcat函数5.2strcat函数的模拟实现 六、strcmp的使用…...
【计算机网络】深入解析 HTTP 协议的概念、工作原理和通过 Fiddler 抓包查看 HTTP 请求/响应的协议格式
网络原理— HTTP 1. 什么是HTTP? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议: HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现) 我们平时打开一个网站,就是通过HTTP协议来…...
InDraw6.2.3 | 甾体、核苷、黄酮类化合物实现简称命名
导语 当化学家对着屏幕输入"2-amino-1,9-dihydro-6H-purin-6-one"时,隔壁生物学家可能正在搜索"鸟嘌呤";这种命名差异如同"火星文"与"地球语"的碰撞。现在,鹰谷InDraw 6.2.3版带着53种多环化合物的…...
AI Copilot——维新派的贾维斯,守旧派的墓志铭(程序员视角)
6500万年前的那颗陨石好像要落下来了 这一段时间,伴随着claude sonnet 3.7的发布 以及cursor,windsurf 等一众AI智能编辑器的涌现,社区的programming自媒体坐不住了,有一个观点已经快要溢出屏幕:程序员这个岗位要黄&a…...
c++ 接口/多态
目录 接口的通用定义 特点: C 中的接口 接口的作用 接口与抽象类的区别 什么是多态? 多态的类型 1. 编译时多态 2. 运行时多态 多态的实现原理 注意事项 在编程中,接口(Interface) 是一个抽象概念ÿ…...
【大模型学习】第十二章 大模型获取智能机制
目录 引言 1. 模型架构 Transformer架构 层次结构和层数 2. 训练数据 3. 大规模训练 4. 迁移学习与微调 4.1 微调步骤 5. 机制实例 自注意力机制 多头注意力机制 总结 引言 随着深度学习的发展,特别是大型预训练模型(大模型)的出…...
神经网络|(十四)|霍普菲尔德神经网络-Hebbian训练
【1】引言 前序学习进程中,除了对基本的神经网络知识进行了学习,还掌握了SOM神经网络原理,文章链接包括且不限于: 神经网络|(十一)|神经元和神经网络-CSDN博客 神经网络|(十二)|常见激活函数-CSDN博客 神经网络|(十三)|SOM神经…...
华为鸿蒙系统全景解读:从内核设计到生态落地的技术革命
华为鸿蒙系统全景解读:从内核设计到生态落地的技术革命 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 华为鸿蒙系统全景解读&#x…...
基于大数据的Steam游戏数据分析可视化推荐系统
【大数据】🎮 项目名:游戏分析神器,用代码探析游戏世界——《基于大数据的Steam游戏分析与智能推荐系统》(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 &a…...
将长上下文大语言模型研究从输入转向输出
将长上下文大语言模型研究从输入转向输出 摘要: 近年来,长上下文大语言模型(LLMs)的研发主要集中在处理更长的输入文本上,这使得模型在理解长篇内容时取得了显著进步。然而,生成长篇输出的研究却相对被忽视ÿ…...
Dify 开源大语言模型应用开发平台使用(二)
文章目录 说明Dify 使用报告1. 应用创建——专业的锂电池相关知识解答1.1 平台简介1.2 创建应用2. 知识库、工作流、变量、节点与编排节点详解2.1 知识库管理2.2 工作流配置2.3 变量管理2.4 节点与编排节点3. 测试和调试3.1 单元测试3.2 日志与监控3.3 实时调试3.4 性能测试总结…...
CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划
25年2月来自浙大和菜鸟网络的论文“CarPlanner: Consistent Auto-regressive Trajectory Planning for Large-scale Reinforcement Learning in Autonomous Driving”。 轨迹规划对于自动驾驶至关重要,可确保在复杂环境中安全高效地导航。虽然最近基于学习的方法&a…...
K8s面试题总结(十一)
1.如何优化docker镜像的大小? 使用多阶段构建(multi-stage build)选择更小的基础镜像(如alpine)减少镜像层数,合并RUN命令 2.请解释Docker中的网络模式(如bridge,host,none) Bridgeÿ…...
Android Telephony 四大服务和数据网络控制面数据面介绍
在移动通信和Android系统中,涉及的关键概念和服务以及场景案例说明如下: 一、概念 (一)Android Telephony 的四大服务 介绍Telephony Data 与 Android Data 的四大服务在Android系统中,与电话(Telephony)和移动数据(Data)相关的核心服务主要包括以下四类: 1. Tele…...
一文讲懂Go语言如何使用配置文件连接数据库
一文讲懂Go语言如何使用配置文件连接数据库 viper1. viper简介2. viper 读取.toml配置文件定义Go语言结构体编写与Go语言结构体对应的.toml配置文件定义初始化函数定义get函数 连接数据库1. 定义数据库对象2. 定义初始化函数3. 定义 get 函数4. 定义 main 函数, 连接数据库 配置…...
Jmeter使用介绍
文章目录 前言Jmeter简介安装与配置JDK安装与配置JMeter安装与配置 打开JMeter方式一方式二 设置Jmeter语言为中文方法一(仅一次性)方法二(永久设置成中文) Jmeter文件常用目录 元件与组件元件组件元件的作用域元件的执行顺序第一个案例添加线程组添加 H…...
MES机联网4:文档资料
目录信息 MES机联网1:技术方案MES机联网2:采集网关MES机联网3:管理后台MES机联网4:文档资料 MQ接入文档 1、建立连接 mqtt连接地址: 192.168.0.138 mqtt端口: 1883 mqtt用户名:admin mqtt密码:123456 …...
豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数 难度:易 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...
常用无功功率算法的C语言实现(二)
0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…...
23种设计模式简介
一、创建型(5种) 1.工厂方法 总店定义制作流程,分店各自实现特色披萨(北京店-烤鸭披萨,上海店-蟹粉披萨) 2.抽象工厂 套餐工厂(家庭装含大披萨薯条,情侣装含双拼披萨红酒&#…...
开发vue小游戏:数字华龙道
一、游戏介绍 1、历史背景 数字华容道脱胎于传统华容道,后者源自三国时期“曹操败走华容道”的故事。传统玩法是通过移动不同形状的木块,帮助“曹操”从出口逃脱。而数字华容道将棋子替换为数字,目标是通过滑动方块,将乱…...
electron的通信方式(三种)
文章目录 一、渲染进程向主进程发送消息二、渲染进程向主进程发送消息并异步获取结果三、主进程向渲染进程发送消息 electron的主要是主线程和渲染线程之间的通信,简单记录一下三种通信方式 一、渲染进程向主进程发送消息 利用ipcRenderer.send()和ipcMain.on()方法…...
MapReduce技术概述**
** MapReduce是一种并行计算框架,最初由Google开发,后来被Apache开源。它是一种分布式计算模型,能够处理大规模数据集,解决复杂的计算问题。MapReduce技术在数据处理和分析领域广泛应用,尤其是在大数据处理中。 MapR…...
ubuntu挂载固态硬盘
Ubuntu 中挂载位于 /dev/sdc1 的固态硬盘,可以按照以下步骤操作: 步骤 1:确认分区信息 首先,确保设备 /dev/sdc1 存在且已正确分区: sudo fdisk -l /dev/sdc # 查看分区表 lsblk # 确认分区路…...
同为科技智能PDU在数据中心场景的应用与解决方案
数据中心当前处于一个快速发展和技术变革的特殊时期,全新的人工智能应用正在重塑整个世界,为社会带来便捷的同时,也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长,对数据中心提出了大算力、高性能的新需求…...
golang学习笔记——go语言安装及系统环境变量设置
文章目录 go语言安装go envgo getgoproxy测试安装 Go 插件安装 Go 插件依赖工具参考资料用户环境变量和系统环境变量用户环境变量系统环境变量示例设置环境变量的步骤设置用户环境变量设置系统环境变量 验证环境变量总结 2024年最火的5大Go框架1. Gin:高并发接口的“…...
云服务器Linux安装Docker
系统要求 Docker 官方建议将 Docker 运行在 Linux系统上,当然也可以在其他平台运行,本篇博客只介绍在 Linux 系统上的安装方法。 Docker 运行在 CentOS7.X 版本以上,本文使用阿里云 ECS 云服务器 CentOS 7.4 版本。 Docker 需要安装在 64 …...
2025DNS二级域名分发PHP网站源码
安装教程 1.程序必须使用PHP8.1 2.将扩展ixed.8.1.lin放入/www/server/php/81/lib/php/extensions/no-debug-non-zts-20210902 3.打开宝塔→软件商店→PHP8.1→配置文件 4.放入:extensionixed.8.1.lin 5.重启PHP8.1 6.新建站点(mysql5.6-5.7andPHP8.1&a…...
审批流AntV框架蚂蚁数据可视化X6饼图(附注释)
大家好,这次使用的是AntV的蚂蚁数据可视化X6框架,类似于审批流的场景等,代码如下: X6框架参考网址:https://x6.antv.vision/zh/examples/showcase/practices#bpmn 可以进入该网址,直接复制下方代码进行调试…...
git 添加额外的远程仓库 URL
要使用 git branch -a 查看 net-next 远程仓库中的所有分支,请按照以下步骤操作: 步骤 1: 确保已添加 net-next 远程仓库 如果尚未添加 net-next 远程仓库,请运行以下命令: git remote add net-next git://git.kernel.org/pub/s…...
Qt中实现多个QMainWindow同时显示
在Qt中实现多个QMainWindow同时显示,可通过以下方法实现: 一、直接显示多个实例 必须使用new创建堆对象,避免栈对象因作用域结束被销毁。 int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建两个独立的主窗口QMainW…...
在ArcMap中通过Python编写自定义工具(Python Toolbox)实现点转线工具
文章目录 一、需求二、实现过程2.1、创建Python工具箱(.pyt)2.2、使用catalog测试代码2.3、在ArcMap中使用工具 三、测试 一、需求 通过插件的形式将点转线功能嵌入ArcMap界面,如何从零开始创建一个插件,包括按钮的添加、工具的实…...
关于AI数据分析可行性的初步评估
一、结论:可在部分环节嵌入,无法直接处理大量数据 1.非本地部署的AI应用处理非机密文件没问题,内部文件要注意数据安全风险。 2.AI(指高规格大模型)十分适合探索性研究分析,对复杂报告无法全流程执行&…...
cdn取消接口缓存
添加cdn后,使用cdn加速域名访问接口 是缓存,不是最新的数据,如果使用局域网则是最新的数据,如果修改配置,确保使用cdn域名请求的接口返回不是缓存 要确保通过CDN加速域名访问接口时返回的是最新的数据,而不…...
Android 屏幕适配 Tips
概念 屏幕尺寸:屏幕的对角线的长度屏幕分辨率:屏幕分辨率是指在横纵向上的像素点数,单位是px,1px1个像素点。一般以纵向像素x横向像素,如1960x1080屏幕像素密度:每英寸上的像素点数,单位是dpi …...
【Academy】HTTP Host 标头攻击 ------ HTTP Host header attacks
HTTP Host 标头攻击 ------ HTTP Host header attacks 1. 什么是 HTTP Host 标头?2. 什么是 HTTP Host 标头攻击?3. HTTP Host 标头漏洞是如何产生的?4. 如何测试 HTTP Host 标头漏洞4.1 提供任意 Host 标头4.2 检查有缺陷的验证4.3 发送不明…...
大模型架构记录2
一 应用场景 1.1 prompt 示例 1.2 自己搭建一个UI界面,调用接口 可以选用不同的模型,需要对应的API KEY 二 Agent 使用 2.1 构建GPT...
在Windows 11的WSL中安装Kali Linux
Kali Linux 是网络安全从业者和爱好者的首选工具集,但直接在物理机或虚拟机上运行可能占用较多资源。借助 Windows Subsystem for Linux (WSL),我们可以在Windows 11中原生运行Kali Linux,轻量且高效。本教程将手把手教你如何在WSL2中安装并配…...
Qt调试功能使用方法
QT编程环境 QT在Windows操作系统下的三种编程环境搭建。 方案编程环境编译器调试器1Qt CreatorMinGW GCCGDB2Qt CreatorMicrosoft Visual C CompilerDebugging Tools for Widows3Microsoft Visual Studio VS自带VS自带 方案提及的QT安装程序及压缩包均能在官网Index of /off…...
一篇文章讲解清楚ARM9芯片启动流程
SAM9X60 ARM9 boot启动流程关键词介绍: 第一级bootloader - 也叫boot ROM,是集成在MPU内部的ROM里面 它的主要功能是执行对MPU的基本初始化和配置,查找并将第二级bootloader从外部NVM中读取出来并放到MPU内部的SRAM. 可以让MPU强制停留在第一…...
DeepSeek未来发展趋势:开创智能时代的新风口
DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…...
Spring Boot与Axon Framework整合教程
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 Axon Framework是一个用于构建CQRS(命令查询职责分离)和事件溯源(Event Sourcing)应用的框架࿰…...
从技术角度看大语言模型进化技术路线与落地应用详解:未来的最佳实践方向是什么?
文章大纲 **一、模型架构创新:从Transformer到下一代架构****二、训练与优化技术:从暴力Scaling到精细调控****三、数据与知识工程:从粗放喂养到智能增强****四、应用层进化:从通用能力到垂直场景突破****五、伦理与可持续性技术**未来技术路线图参考文献**一、大模型架构创…...
LSM-Tree (日志结构合并树)
LSM-Tree(日志结构合并树)是一种高效处理写操作的存储结构,广泛应用于NoSQL数据库如LevelDB和RocksDB。其核心思想是将随机写入转换为顺序写入,提升吞吐量。以下是其原理及Java实现示例: ### **LSM-Tree 原理** 1. **…...
自动驾驶---不依赖地图的大模型轨迹预测
1 前言 早期传统自动驾驶方案通常依赖高精地图(HD Map)提供道路结构、车道线、交通规则等信息,可参考博客《自动驾驶---方案从有图迈进无图》,本质上还是存在问题: 数据依赖性高:地图构建成本昂贵,且跨区域泛化能力受限。动态场景局限性:地图无法实时反映临时障碍物或施…...
记录一次mysql全文索引不生效
先是创建全文索引: alter table sms_img_library add fulltext index sms_img_library_title_idx(title) 但是执行下面sql,没有数据出来 select * from sms_img_library where match (title) against(壮丽);排查了最小分词,设置为2 SHOW…...
蓝桥杯题型
蓝桥杯 蓝桥杯题型分类语法基础艺术与篮球(日期问题)时间显示(时间问题)跑步计划(日期问题)偶串(字符)最长子序列(字符)字母数(进制转换)6个0&…...
用Python分割并高效处理PDF大文件
在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…...
DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元
背景 在全球人工智能技术高速迭代的背景下,算力成本高企、异构资源适配复杂、模型部署效率低下等问题,始终是制约企业AI规模化应用的关键。 DeepSeek以创新技术直击产业痛点,而博云先进算力管理平台AIOS的全面适配,则为这一技术…...
顶点着色器和片段着色器
在Unity渲染中,**顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)**是图形渲染管线中的两个核心阶段。我们可以通过一个比喻来理解它们的分工:想象你要画一幅由三角形组成的3D模型,顶点…...