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

蓝桥备赛(四)- 数组(下)

一 、 字符数组

1.1 介绍

数组的元素如果是字符类型 , 这种数组就是字符数组 , 字符数组可以是一维数组 , 可以是二维数组 (多维数组)。

接下来主要讨论一维的字符数组 :

char arr1[5]    //一维数组

char arr2[3][5]  // 二维数组

C语言  中使用 双引号 括起来一串字符表示字符串 , 这种方式虽然在C++中也是支持的(C++提供了string) ,但我们一般会将这种字符串称为 C语言风格的字符串 。如果需要将一个C语言风格的字符串存储起来 , 就可以使用字符数组

1.2 初始化

1.字符数组的创建:char a[10];

2 . 字符数组的创建同一维数组的创建一样 , 就不再赘述 , 字符串数的初始化有2种方式:

#include <iostream>
#include <cstdio>
using namespce std;int main()
{//1.直接使用字符串初始化char ch1[10] = "abcdef";//后面的默认为0char ch2[] = "abcdef";//数组大小根据初始化进行调整//2.用字符进行初始化char ch3[10] = {'a','b','c','d','e','f'};//后面默认为0char ch4[] =  {'a','b','c','d','e','f'};return 0;
}

 如果调试看⼀下 ch2 ch4 数组的内容,我们会明显的发现,数组 ch2 中多⼀个 '\0' 字符,这是因为字符串的末尾其实隐藏⼀个 '\0' 字符,这个 '\0' 是字符串的结束标志,在打印字符串的时候遇到 '\0' ,打印结束。

注意 ,字符数组的打印和整型数组的打印一定要区分开来 !!!

1.3 字符串长度 - strlen

问题引入:我们看下面的ch1 , 数组长度是10 , 但是数组并没有被字符填满 , 字符串的长度是6,这时候要怎么计算 ? 

C/C++中有一个库函数 : strlen , 可以求字符串长度 , 其实统计的就是字符串中 \0 之前的字符个数 。strlen 需要的头文件是<cstring> 

strlen - C++ Reference

size_t strlen ( const char * str );
//str - 指针,存放的是字符串的起始地址,从这个地址开始计算字符串的长度
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch1[10] = "abcdef";int n = strlen(ch1); cout << n << endl;int sz = sizeof(ch1)/sizeof(ch1[0]);cout << sz << endl;return 0;
}

 字符数组的元素个数 , 大小是用sizeof求 ; 字符数组的长度是用strlen来求!

1.4 字符数组的输入

输入没有空格字符串

1)使用scanf函数和字符数组来实现:(这里推荐使用VS,调试观察)

数组首元素就是数组的地址

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch[20] = { 0 };//输入scanf("%s", ch);//输出printf("%s", ch);return 0;
}

我们发现会报错 , 不用担心 , 按照下面添加语句即可 : 

#define _CRT_SECURE_NO_WARNINGS 1

 继续运行 :

按下F10 进行调试 , 可以看到没有初始化的字符元素默认为'\0' 

 2)使用cin 和 字符数组来实现:

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch[20] = { 0 };//输入cin >> ch;//输出cout << ch << endl;return 0;
}

3) 上面两个代码是将字符串读取后从数组的其实位置开始存放的 , 当然也可以指定位置存放 。

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch[20] = { 0 };//输入//+2的意思就是跳过两个元素 , 就是第三个元素cin >> ch + 2;//输出cout << ch + 2<< endl;return 0;
}

那么从第n个元素开始存放 , 就应该是 cin >> arr + n ; 使用scanf 也是一样的 。

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch[20] = { 0 };//输入scanf("%s", ch + 2);//输出printf("%s", ch + 2);return 0;
}

输入有空格的字符串

1)发现问题:

前面我们讲解了scanf 和 cin 读取不含空格的字符串 , 一切正常 , 那如果我们输入的字符串中带有空格 , 实际上是无法正常打印出我们想要的结果 , 而是读到空白字符 , 编译器默认读完

2)scanf的方式 :

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch[20] = { 0 };//输入scanf("%s", ch );//输出printf("%s", ch );return 0;
}

 当输入"abc    def"的时候 , 实际上scanf 只读取了abc就结束了 , 也就是相当于遇到空格就结束了。


这里特别说一下占位符 %s  。 它其实不能简单地等同于字符串。它的规则是,从当前第⼀个

非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止

 %s 的读取不会包含空白字符,所以无法用来读取多个单词,除非多个 %s ⼀起使用。

这也意味着, scanf() 不适合读取可能包含空格的字符串,比如书名或歌曲名。 另外有⼀
个细节注意⼀下, scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个 \0 字符

同时scanf() , 将字符串读入字符数组的时候 , 不会检测字符串是否超过了数组的长度 。 

为了防止这种情况 , 使用%s 占位符的时候 , 可以指定读入字符串的最长长度 , 即写成%[m]s , 其中的[m]是一个整数 , 表示读取字符串的最长长度 , 后面的字符将被丢弃

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char ch[20] = { 0 };//输入scanf("%5s", ch);//输出printf("%s", ch);return 0;
}

 上面的%5s表示最多读取用户输入的10个字符 , 后面的字符将被丢弃 , 这样就不会有数组溢出的风险了。

3)cin的方式:

结果都一样~~~~, 没有任何区别!!!

其实cin在读取一个字符串的时候 , 在遇到空白字符的时候 , 就认为字符串就结束了往后读取剩余的字符,同时将已经读取到的字符串末尾加上\0 , 直接存储起来 。 

4)解决问题:

4-1)gets 和 fgets

使用gets函数的方式 , 这种方式能解决问题 , 但是 因为gets 存在 安全性问题 , 在C++11中取消了gets , 随后给出了更加安全的方案:fgets

char * gets ( char * str );
char * fgets ( char * str, int num, FILE * stream );
                                |               |               |
                          地址  最多存放的大小  流

gets 原理 : gets 是从第一个字符开始读取的 , 一致读取到\n停止 , 但是不会读取\n , 也就是读取到的内容中不包含\n , 但是会在读取到的内容后面自动加上 \0 。 (读到\n,但不读取\n,会自动加\0)

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[10] = {0};gets(arr);printf("%s",arr);return 0;
}

小提示 : Dec - C++中使用gets函数 , 没有报错 , 但是在其他IDE上 , 比如VS , 就会报错。所以慎用gets !!!! 

 4-2)fgets

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[10] = {0};fgets(arr,sizeof(arr),stdin);printf("%s",arr);return 0;
}

fgets 原理 : fgets 也是从第一个字符开始读取,最多读取 num-1 个字符,最后⼀个位置留给 \0 ,如果 num 的长度是远大于输入的字符串长度,就会⼀直读取到 \n 停止,并且会读取 \n ,将 \n 作 为读取到内容的⼀部分,同时在读取到的内容后自动加上 \0 (最多读num-1个,读取\n ,然后加\0) --> 这时候需要注意遍历数组的时候,需要考虑换行问题。

用gets 和 fgets 同时输入"abc def" , 两者差异如下: 

 4-3)scanf

当然C语言中使用  scanf 函数其实也能做到读取带有空格的字符串,只是不常见。
 将 "%s" 改成 "%[^\n]s" , 其中在 % s 之间加上了 [^\n] 意思是⼀直读取,直到遇到
\n ,这样即使遇到空格也就不会结束了。 这种方式读取,不会将 \n 读取进来,但是在读取到的字符串末尾加上 \0 。(不读取\n , 自动加\0
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[10] = { 0 };scanf("%[^\n]s", arr);printf("%s", arr);return 0;
}

4-4)getchar

使用getchar 逐个字符的读取 , 也是可以读取一个字符串的。

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[20];int ch = 0;int i = 0;while ((ch = getchar()) != '\n'){arr[i++] = ch;}printf("%s\n", arr);return 0;
}

1.5 字符数组的输出

1 . C语言中可以在printf 函数中使用 %s 占位符的方式 , 打印字符数组中的字符串。

2 . C++中使用 cout , 可以直接打印字符数组中的字符串内容 。

3 . 也可以采用循环的方式逐个字符打印字符串内容 。

 ---> 字符串的结束标志是\0

----> strlen

4 . 如果没有\0的字符数组 , 计算数组的长度 , for循环

 方法一:printf 、cout

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[] = "Hello Wrold!";printf("%s\n",arr);cout << arr << endl;return 0;
}

方法二:循环

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[] = "Hello Wrold!";int i = 0;while(arr[i] != '\0'){cout << arr[i];i++;	} cout << endl;return 0;
}

 方法三:单个字符打印,根据字符长度来逐个打印 (strlen 可以用来计算字符串的长度,不包含\0,记住需要包含头文件<cstring>

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[] = "Hello Wrold!";for(int i = 0; i< strlen(arr);i++){cout << arr[i];	}	cout << endl;return 0;
}

方法四:当我们遇到没有\0的字符数组的时候 , 我们可以计算数组的长度来打印字符数组

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr[] = {'a','b','c','d'};int sz = sizeof(arr)/sizeof(arr[0]);for(int i = 0; i< sz;i++){cout << arr[i];	}	cout << endl;return 0;
}

 方法很多 , 根据需求来选择!

1.6 strcpy

使用字符数组可以存放字符串 , 但是字符数组能否直接赋值呢?

比如:

char arr1[] = "abcdef";
char arr2[20] = {0};
arr2 = arr1;//这样赋值可以吗?
不可以 , 常量不可改
其实C/C++中有一个库函数 --> strcpy , 可以拷贝字符串

 strcpy - C++ Reference

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr1[] = "abcdef";char arr2[20] = {0};strcpy(arr2,arr1);cout << arr2 << endl;return 0;
}

1.7 strcat

在一个字符的末尾追加一个字符串 , 那字符串能直接追加吗?

char arr1[20] = "hello ";
 char arr2[] = "world";
 arr1 += arr2;//这样也是不行的
其实C/C++中有一个库函数strcat , 可以实现该功能。
char * strcat ( char * destination, const char * source );

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int main()
{char arr1[20] = "Hello ";char arr2[] = "World!";strcat(arr1,arr2);cout << arr1 << endl;return 0;
}

注意:追加到的数组需要空间大小足够,否组会越界

1.8 练习

练习一:自动修正

P5733 【深基6.例1】自动修正 - 洛谷

#include <iostream>
#include <cstdio>
using namespace std;const int N = 110;
char arr[N];
int main()
{cin >> arr;//cin输入字符串后,会在末尾存放\0 //调整字符串int i = 0;while(arr[i] != '\0'){if(arr[i] >= 'a' && arr[i] <= 'z'){arr[i] -= 32;//小写转大写}i++; } cout << arr << endl;return 0;
}

除了借助'\0'  , 还可以借助strlen 计算字符数组的长度 :

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;const int N = 110;
char arr[N];
int main()
{cin >> arr;int len = strlen(arr);int i = 0;for(int i = 0;i < len ; i++){if(arr[i] >= 'a' && arr[i] <= 'z'){arr[i] -= 32;//小写转大写}	}cout << arr << endl;return 0;
}

这里再给大家介绍两组函数:islowe 和 tolower , 需要的头文件是<cctype>

islower - C++ Reference

tolower - C++ Reference

字符分类函数和字符转换函数:<cctype> (ctype.h) - C++ Reference

int islower ( int c ); //判断字符是否是小写字母
int tolower ( int c ); //转换成小写字母

1 . islower 是C/C++中提供的一个判断字符是否是小写字符的一个函数 , 如果c是小写字母 , 函数返回一个非0的数字 , 如果不是小写字母 , 函数返回 0 , 还有一个函数是 issupper ,是判断是否大写字母的 。

2 . tolower 是C/C++中提供的一个将参数C 从大写字母转化成小写字母的函数 ,如果C是小写字母将什么也不发生。

有了以上的函数,我们可以对这道题目的代码进行修改。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;const int N = 110;
char arr[N];
int main()
{cin >> arr;for(int i = 0;arr[i] != '\0';i++){if(islower(arr[i]))arr[i] = toupper(arr[i]);}cout << arr << endl;return 0;
}

练习二:统计数字字符个数

B2109 统计数字字符个数 - 洛谷

#include <iostream>
#include <cstdio>
#include <cstring> 
using namespace std;const int N = 265;
char arr[N];
int main()
{//使用fgets读取带空格的字符串时候,会读取\n,并将\n也读取到arr中,然后末尾加\0 fgets(arr,265,stdin);int i = 0;int c = 0;while(arr[i] != '\n'){if(arr[i] >= '0' && arr[i] <= '9')c++;i++;	}cout << c << endl;return 0;
}

判断一个字符是否是数字字符 , 有一个函数是isdigit , 可以直接使用

int isdigit ( int c );
如果参数c是数字字符 , 则返回非0的数值 , 如果不是数字字符 , 则返回0
需要包含头文件<cctype>
#include <iostream>
#include <cstdio>
#include <cctype> 
using namespace std;const int N = 265;
char arr[N];
int main()
{//使用fgets读取带空格的字符串时候,会读取\n,并将\n也读取到arr中,然后末尾加\0 fgets(arr,265,stdin);int i = 0;int c = 0;while(arr[i] != '\n'){if(isdigit(arr[i]))c++;i++;	}cout << c << endl;return 0;
}

 

练习三:整理药名

信息学奥赛一本通(C++版)在线评测系统

#include <iostream>
#include <cstdio>
#include <cctype> 
using namespace std;const int N = 25;
char arr[N];
int main()
{int n;cin >> n;while(n--){//输入药名cin >> arr;//处理第一个字符 if(islower(arr[0])) arr[0] = toupper(arr[0]);int j = 1;while(arr[j] != '\0'){if(isupper(arr[j]))arr[j] = tolower(arr[j]);j++;}//输出cout << arr << endl; } return 0;
}

练习四:基因相关性

B2111 基因相关性 - 洛谷

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;const int N = 510;
char a1[N];
char a2[N];
int main()
{double n = 0;cin >> n;cin >> a1;cin >> a2;int len = strlen(a1);int c = 0;for(int i = 0; i < len ; i++){if(a1[i] == a2[i])c++;}if(c*1.0 / len >= n)cout << "yes" << endl;elsecout << "no" << endl; return 0;
}

练习五:输出亲朋字符串

B2113 输出亲朋字符串 - 洛谷

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;const int N = 110;
char arr[N];
int main()
{cin >> arr;//n-1int i = 0;while(arr[i+1] != '\0'){char tmp = arr[i] + arr[i+1];cout << tmp;i++;}//ncout << (char)(arr[i] + arr[0]) << endl;return 0;
}

方法二 : 我们发现  (最后一个元素的下标) %  元素个数 ==   第一个元素的下标 , 借助这一个特点 , 我们可以统一用一个式子来求亲朋数 , 需要注意的是 , % 运算符 的优先级比 + 高 , 所以需要加上小括号 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;const int N = 110;
char arr[N];
int main()
{cin >> arr;int i = 0;int len = strlen(arr);while(arr[i] != '\0'){//% 的优先级比 + 的高 char tmp = arr[i] + arr[(i+1)%len];cout << tmp;i++;}return 0;
}

 

练习六:验证子串

B2118 验证子串 - 洛谷

介绍一个函数 , 可以用来判断字串 : strstr 

strstr - C++ Reference

const char * strstr ( const char * str1, const char * str2 ) ;
这个函数本质上是用来查找子字符串的 。在str1 字符串中查找str2 字符串第一次出现的位置,如果找到了,就返回第一次出现的地址 ; 如果没有找到 , 就返回NULL(0)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;const int N = 25;
char a1[N];
char a2[N];
int main()
{cin >> a1;cin >> a2;if(strstr(a1,a2))cout << a2 << " is substring of " << a1 << endl;else if(strstr(a2,a1))cout << a1 << " is substring of " << a2 << endl;	elsecout << "No substring" << endl;return 0;} 

练习七:找到第一个只出现一次的字符

B2110 找第一个只出现一次的字符 - 洛谷

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;//方法一:暴力求解
const int N = 1110;
char arr[N];
int main()
{cin >> arr;int i = 0;int flag = 0;//表示没有出现仅一个的字符 while(arr[i]){int j = 0;int c = 0;while(arr[j]){if(arr[i] == arr[j]){c++;}j++;}if(c == 1){flag = 1;cout << arr[i] << endl;break;}i++;}if(flag == 0)cout << "no" << endl;return 0;	
} 

方法二:题目说字符串中只有小写字母,小写字母的ASCII值的范围是:97~122,在C和C++中每个字符都有ASCII值,标准的ASCII码表中有128个字符,ASCII值的范围是0~127.

所以我们创建⼀个128元素的整型数组,下标分别是0~127,下标正好和字符的ASCII值范围对应,那么整型的数组的⼀个元素就为⼀个字符计数就可以。每读取⼀个字符,根据字符的ASCII值将数组中下标为字符ASCII值的元素值+1,相当于统计这个字符出现的次数。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;const int N = 1110;
char arr[N];
int num[128] = {0};
int main()
{int i = 0;while((arr[i] = getchar())!='\n'){num[arr[i]]++;i++;}i = 0;int flag = 0;while(arr[i]){if(num[arr[i]] == 1){flag = 1;cout << arr[i] << endl;break;}i++;}if(flag == 0)cout << "no" << endl; return 0;
}

 

相关文章:

蓝桥备赛(四)- 数组(下)

一 、 字符数组 1.1 介绍 数组的元素如果是字符类型 &#xff0c; 这种数组就是字符数组 &#xff0c; 字符数组可以是一维数组 &#xff0c; 可以是二维数组 (多维数组)。 接下来主要讨论一维的字符数组 : char arr1[5] //一维数组 char arr2[3][5] // 二维数组 C语言 中…...

基金 word-->pdf图片模糊的解决方法

1. 首先需要Adobe或福昕等pdf阅读器。 2. word中 [文件]--[打印]&#xff0c;其中打印机选择pdf阅读器&#xff0c;例如此处我选择福昕阅读器。 3. 选择 [打印机属性]--[编辑]--[图像]&#xff0c;将所有的采样、压缩均设置为 关闭。点击[另存为]&#xff0c;保存为 基金报告…...

身为小兵,如何提升不可替代性?

之前聊过,研发、PIE、PE、可靠性等岗位,主要是对物的工作, 这类岗位,如何提升不可替代性? 我的经验是,学会识别创造性工作or重复性工作。 尽可能地做创造性工作,推重复性工作。 销售、采购、HR等岗位,主要是对人的工作, 这类岗位,如何提升不可替代性? 我的思考…...

easyExcel使用案例有代码

easyExcel 入门,完成web的excel文件创建和导出 easyExcel官网 EasyExcel 的主要特点如下&#xff1a; 1、高性能&#xff1a;EasyExcel 采用了异步导入导出的方式&#xff0c;并且底层使用 NIO 技术实现&#xff0c;使得其在导入导出大数据量时的性能非常高效。 2、易于使…...

linux服务器更新jar包脚本

【需求】Java每次发布新的版本都需要先kill掉原来的服务&#xff0c;然后再启动新的包 有了这个脚本只需要把包替换掉&#xff0c;服务会自动kill 以8184 为例 完整的脚本如下 #!/bin/bash# 检查端口 8184 是否被占用 PORT8184 PID$(lsof -t -i:$PORT)if [ -n "$PID…...

Tomcat 乱码问题彻底解决

1. 终端乱码问题 找到 tomcat 安装目录下的 conf —> logging.properties .修改ConsoleHandler.endcoding GBK &#xff08;如果在idea中设置了UTF-8字符集&#xff0c;这里就不需要修改&#xff09; 2. CMD命令窗口设置编码 参考&#xff1a;WIN10的cmd查看编码方式&…...

dify绑定飞书多维表格

dify 绑定飞书和绑定 notion 有差不多的过程&#xff0c;都需要套一层应用的壳子&#xff0c;而没有直接可以访问飞书文档的 API。本文记录如何在dify工具中使用新增多条记录工具。 创建飞书应用 在飞书开放平台创建一个应用&#xff0c;个人用户创建企业自建应用。 自定义应…...

深入浅出:插入排序算法完全解析

1. 什么是插入排序&#xff1f; 插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;其基本思想与我们整理扑克牌的方式非常相似。我们将扑克牌从第二张开始依次与前面已排序的牌进行比较&#xff0c;将其插入到合适的位置&#xff0c;直到所有牌…...

MySQL--DQL、DML、DDL、DCL概念与区别

在SQL中&#xff0c;根据功能和操作对象的不同&#xff0c;通常将语文分为四大类&#xff1a;DQL&#xff08;数据查询语言&#xff09;、DML&#xff08;数据操作语言&#xff09;、DDL&#xff08;数据定义语言&#xff09;、DCL&#xff08;数据控制语言&#xff09; 一、D…...

【设计原则】里氏替换原则(LSP):构建稳健继承体系的黄金法则

深入理解里氏替换原则&#xff08;LSP&#xff09;及其在C#中的实践 一、什么是里氏替换原则&#xff1f;二、为什么需要LSP&#xff1f;三、经典违反案例&#xff1a;矩形与正方形问题四、正确的设计实践方案1&#xff1a;通过接口分离方案2&#xff1a;使用抽象类 五、LSP的关…...

SQL的select语句完整的执行顺序

SQL的SELECT语句的执行顺序可以用"做菜流程"来类比理解。虽然我们写SQL时按SELECT…FROM…WHERE…顺序写&#xff0c;但数据库执行顺序完全不同。以下是通俗易懂的讲解&#xff08;附流程图和示例&#xff09;&#xff1a; &#x1f527; 执行顺序流程图&#xff1a…...

【Vue3】浅谈setup语法糖

Vue3 的 setup 语法糖是通过 <script setup> 标签启用的特性&#xff0c;它是对 Composition API 的进一步封装&#xff0c;旨在简化组件的声明式写法&#xff0c;同时保留 Composition API 的逻辑组织能力。以下是其核心概念和原理分析&#xff1a; 一、<script setu…...

算法-二叉树篇27-把二叉搜索树转换为累加树

把二叉搜索树转换为累加树 力扣题目链接 题目描述 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提…...

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

《国密算法开发实战:从合规落地到性能优化》

前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…...

DeepSeek开源周Day5压轴登场:3FS与Smallpond,能否终结AI数据瓶颈之争?

2025年2月28日&#xff0c;DeepSeek开源周迎来了第五天&#xff0c;也是本次活动的收官之日。自2月24日启动以来&#xff0c;DeepSeek团队以每天一个开源项目的节奏&#xff0c;陆续向全球开发者展示了他们在人工智能基础设施领域的最新成果。今天&#xff0c;他们发布了Fire-F…...

Linux:进程替换

目录 进程程序替换 替换原理 进程替换相关函数 环境变量与进程替换函数 命令行解释器(my_xshell) 进程程序替换 上一篇进程控制讲到&#xff0c;父进程创建子进程就是为了让子进程去做一些另外的事情&#xff0c;但是不管怎么说&#xff0c;子进程的部分代码也还是父进程…...

CSS 日常开发常用属性总结

文章目录 CSS 日常开发常用属性总结一、 常用 CSS 属性1、布局相关&#xff08;1&#xff09;display&#xff1a;&#xff08;2&#xff09;position&#xff1a;&#xff08;3&#xff09;float&#xff1a;&#xff08;4&#xff09;clear&#xff1a; 2、尺寸与溢出&#x…...

Python 绘制迷宫游戏,自带最优解路线

1、需要安装pygame 2、上下左右移动&#xff0c;空格实现物体所在位置到终点的路线&#xff0c;会有虚线绘制。 import pygame import random import math# 迷宫单元格类 class Cell:def __init__(self, x, y):self.x xself.y yself.walls {top: True, right: True, botto…...

了解Java集合的概念和体系:Collection<T>、Collections与Stream的使用

学习目标 本文知识是对集合层级的介绍&#xff0c;应用开发中实际使用的是他们的子级&#xff0c;感兴趣的小伙伴或者想深入了解有关Java集合知识的朋友可以选择阅读&#xff01; Stream的方法使用使用部分代码块内大多有两种实现方式&#xff0c;是为了更好的理解方法底层的代…...

扫描局域网可用端口

site: https://mengplus.top #SiliconFlow : 在Linux系统&#xff0c;你可以使用一个简单的Bash脚本来扫描局域网中可用的端口。这个脚本可以使用nmap工具来实现。nmap是一个强大的网络扫描工具&#xff0c;可以用来探测网络中的主机和端口。 以下是一个简单的Bash脚本&#…...

算法分析 —— 《栈》

文章目录 删除字符串中的所有相邻重复项题目描述&#xff1a;代码实现&#xff1a;代码解析&#xff1a; 比较含退格的字符串题目描述&#xff1a;代码实现&#xff1a;代码解析&#xff1a; [基本计算器 II](https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-…...

693. 交替位二进制数

交替位二进制数 题目描述尝试做法推荐做法 题目描述 给定一个正整数&#xff0c;检查它的二进制表示是否总是 0、1 交替出现&#xff1a;换句话说&#xff0c;就是二进制表示中相邻两位的数字永不相同。 示例 1&#xff1a; 输入&#xff1a;n 5 输出&#xff1a;true 解释…...

uniapp中使用leaferui使用Canvas绘制复杂异形表格的实现方法

需求&#xff1a; 如下图&#xff0c;要实现左图的样式&#xff0c;先实现框架&#xff0c;文字到时候 往里填就行了&#xff0c;原来的解决方案是想用css,html来实现&#xff0c;发现实现起来蛮麻烦的。我也没找到合适的实现方法&#xff0c;最后换使用canvas来实现&#xff…...

Java 反射(Reflection)的原理和应用

反射&#xff08;Reflection&#xff09;是 Java 语言的一项强大功能&#xff0c;它允许程序在运行时动态地获取类的信息&#xff0c;并且可以操作这些信息&#xff0c;如创建对象、调用方法、访问字段等。反射机制的核心在于 Java 的 类加载机制 和 动态类型检查&#xff0c;使…...

Linux top 常用参数记录

top命令经常用来监控linux的系统状况&#xff0c;能实时显示系统中各个进程、线程的资源占用情况&#xff0c;是常用的性能分析工具。 一些常用参数记录 top的使用方式 top [-d number] | top [-bnp] # 5s 更新一次 top -d 5# 进行2次top命令的输出结果 top -n 2# 查看进程的…...

hive之LEAD 函数详解

1. 函数概述 LEAD 是 Hive 中的窗口函数&#xff0c;用于获取当前行之后指定偏移量处的行的值。常用于分析时间序列数据、计算相邻记录的差异或预测趋势。 2. 语法 LEAD(column, offset, default) OVER ([PARTITION BY partition_column] [ORDER BY order_column [ASC|DESC]…...

Element Plus中el-tree点击的节点字体变色加粗

el-tree标签设置 <el-tree class"tree":data"treeData":default-expand-all"true":highlight-current"true"node-click"onTreeNodeClick"><!-- 自定义节点内容&#xff0c;点击的节点字体变色加粗 --><!-- 动…...

.gitignore 设置后不见效的解决方法中,方案一就可以了

遇到的问题&#xff1a;你的 .gitignore 文件中包含了 unpackage/ 目录&#xff0c;但它不起作用的原因可能有以下几个&#xff1a; 1. 文件或目录已经被 Git 跟踪 .gitignore 只能忽略 未被 Git 追踪 的文件或目录。如果 unpackage/ 目录已经被提交到 Git 版本库中&#xff…...

git提交管理

git提交管理 scoop install nodejs # windows npm install --save-dev commitlint/config-conventional commitlint/cli # non-windows npm install --save-dev commitlint/{cli,config-conventional} # windows将commitlint.config.js修改为utf8编码, 默认utf16编码 echo &qu…...

DeepSeek八大组合软件,效率加倍

DeepSeek王炸组合&#xff1a;开启2025年高效工作与创意新时代 在科技飞速发展的2025年&#xff0c;人工智能和各类工具的融合正不断重塑我们的工作与生活方式。DeepSeek作为一款强大的工具&#xff0c;与众多应用组成的王炸组合&#xff0c;展现出了令人瞩目的能力。今天&…...

TCP和UDP比较

以下是 TCP&#xff08;传输控制协议&#xff09; 和 UDP&#xff08;用户数据报协议&#xff09; 的详细对比&#xff0c;涵盖核心特性、应用场景及技术差异&#xff1a; 1. 核心特性对比 特性TCPUDP连接方式面向连接&#xff08;需三次握手建立连接&#xff09;无连接&#…...

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…...

Postgresql高可用之Pacemaker+Corosync

简介 Pacemaker 是 ClusterLabs 开源高可用性集群堆栈的资源管理器。它协调配置、启动、监控和跨所有集群节点恢复相互关联的服务。在这套高可用架构用会用到Pacemaker、Corosync以下是对其功能作用的说明。 Corosync &#xff1a;主要负责 集群通信和成员管理&#xff0c;它用…...

智能成绩表

智能成绩表 真题目录: 点击去查看 E 卷 100分题型 题目描述 小明来到学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗? 输入描述 第 1 行输入两个整数,学生人数 n 和科目数量 m。 0 < n < 1000 < m < 10第 2 行输入 m 个科目名称,彼此之…...

制作安装win10系统U盘详细步骤

https://www.microsoft.com/zh-cn/software-download/windows10 ①微软官方链接&#xff0c;下载工具 ②下载之后&#xff0c;点击鼠标右键用管理员身份运行 ③等待几分钟 ④出现许可条款点击接受 ⑤点击为另一台电脑安装介质&#xff0c;然后下一步 ⑥根据需要选择版本。 体系…...

【RAG】Embeding 和 Rerank学习笔记

Q: 现在主流Embeding模型架构 在RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统中&#xff0c;嵌入模型&#xff08;Embedding Model&#xff09; 是检索阶段的核心组件&#xff0c;负责将查询&#xff08;Query&#xff09;和文档&#xff08;Document&#…...

华为 Open Gauss 数据库在 Spring Boot 中使用 Flyway

db-migration&#xff1a;Flyway、Liquibase 扩展支持达梦&#xff08;DM&#xff09;、南大通用&#xff08;GBase 8s&#xff09;、OpenGauss 等国产数据库。部分数据库直接支持 Flowable 工作流。 开源代码仓库 Github&#xff1a;https://github.com/mengweijin/db-migrat…...

B/B+树与mysql索引

数据结构操作网站&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(log n)O(log n) B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(…...

心智模式与企业瓶颈突破

“是环境限制了你&#xff0c;还是你的心智模式&#xff1f;” 当企业发展遇到瓶颈&#xff0c;我们习惯于找外部原因&#xff1a;经济不好、竞争加剧、资源不够、市场环境变化快 可现实是&#xff0c;在同样的市场环境下&#xff0c;总有企业逆势增长&#xff0c;而有些企业只…...

介绍微信小程序中页面的生命周期函数和组件的生命周期函数

1.1 页面生命周期函数 这些函数主要用于管理页面的显示和隐藏。 onLoad(options): 页面加载时触发&#xff0c;options 是页面路由参数&#xff0c;可以在这里初始化数据。每当用户进入该页面时都会调用这个函数。 onShow(): 页面显示时触发。每当页面从后台切换到前台时都会…...

网络运维学习笔记(DeepSeek优化版)009网工初级(HCIA-Datacom与CCNA-EI)路由理论基础与静态路由

文章目录 路由理论基础核心概念路由表六要素路由选路原则加表规则选路优先级 协议与参数常见协议号路由协议优先级对比 网络架构基础AS&#xff08;autonomous system&#xff0c;自治系统&#xff09;路由分类 静态路由(static routing)实验拓扑思科配置示例华为配置示例 典型…...

基于微信小程序的疫情互助平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;从2019年底新型冠状肺炎疫情的爆发以来&#xff0c;使很多工作的管理工作难度再上一层楼。为了在疫情期间能更好的维护信息管理&#xff0…...

【SRC实战】小游戏漏洞强制挑战

小游戏业务分析: 1、挑战成功加分&#xff0c;失败减分&#xff0c;存在段位机制&#xff0c;段位影响榜单排名 2、随机推荐挑战对象&#xff0c;随着等级升高不再推荐低等级玩家 3、玩家等级需要培养&#xff0c;培养需要道具&#xff0c;道具需要看广告/完成任务/付费 4、…...

阿里云轻量级服务器通过宝塔安装PgVector要点

设置环境变量&#xff1a; export PG_HOME/www/server/pgsql export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/www/server/pgsql/lib export PG_CONFIG/www/server/pgsql/bin/pg_config export PGDATA/www/server/pgsql/data PATH$PATH:$HOME/.local/bin:$HOME/bin:$PG_HOME/bin ali…...

安装 Windows Docker Desktop - WSL问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Desktop - WSL update failed An error o…...

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…...

神经网络之RNN和LSTM(基于pytorch-api)

1.RNN 1.1简介 RNN用于处理序列数据。在传统的神经网络模型中&#xff0c;是从输入层到隐含层再到输出层&#xff0c;层与层之间是全连接的&#xff0c;每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如&#xff0c;你要预测句子的下一个单词是…...

16.3 LangChain Runnable 协议精要:构建高效大模型应用的核心基石

LangChain Runnable 协议精要:构建高效大模型应用的核心基石 关键词:LCEL Runnable 协议、LangChain 链式开发、自定义组件集成、流式处理优化、生产级应用设计 1. Runnable 协议设计哲学与核心接口 1.1 协议定义与类结构 #mermaid-svg-PlmvpSDrEUrUGv2p {font-family:&quo…...

[操作系统] 文件的软链接和硬链接

文章目录 引言硬链接&#xff08;Hard Link&#xff09;什么是硬链接&#xff1f;硬链接的特性硬链接的用途 软链接&#xff08;Symbolic Link&#xff09;什么是软链接&#xff1f;软链接的特性软链接的用途 软硬链接对比文件的时间戳实际应用示例使用硬链接节省备份空间用软链…...