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

C++蓝桥杯基础篇(七)

片头

嗨~小伙伴们,大家好!今天我们来一起学习蓝桥杯基础篇(七),学习相关字符串的知识,准备好了吗?咱们开始咯!


一、字符与整数的联系——ASCII码

每个常用字符都对应一个-128~127的数字,二者之间可以相互转化:

int main() {char c = 'a';cout << (int)c << endl;int a = 66;cout << (char)a << endl;return 0;
}

打印结果为:

97

B

 常用的ASCII值:'A'~'Z'是65~90,'a'~'z'是97~122,'0'~'9'是48~57,字符可以参与运算,运算时会将其当做整数:

// 字符可以参与运算,运算时会将其当做整数
int main() {int a = 'B' - 'A';int b = 'A' * 'B';char c = 'A' + 2;cout << a << endl;cout << b << endl;cout << c << endl;return 0;
}

运行结果为:

1

4290

C

 练习:输入一行字符,统计出其中数字字符的个数,以及字母字符的个数

//练习: 输入一行字符,统计出其中数字字符的个数,以及字母字符的个数
int main() {char c;int num = 0;	//数字字符的个数int chars = 0;	//字母字符的个数while (cin >> c) {if (c >= '0' && c <= '9') num++;else if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') chars++;}cout << "数字字符的个数为: " << num << endl;cout << "字母字符的个数为: " << chars << endl;return 0;
}

二、字符数组

字符串就是字符数组加上结束符'\0'。

可以使用字符串来初始化字符数组,但是要注意,每个字符串结尾会暗含一个'\0'字符,因此字符数组的长度至少要比字符串的长度多1!

int main() {char a1[] = { 'C','+','+' };		//没有'\0'char a2[] = { 'C','+','+','\0' };   //有'\0'char a3[] = "C++";					//自动添加表示字符串结尾的空字符'\0'//char a4[6] = "Daniel";//没有位置存放'\0',报错char a4[7] = "Daniel";  //正确写法cout << sizeof a1 << endl;  //3cout << sizeof a2 << endl;	//4cout << sizeof a3 << endl;	//4return 0;
}

如果我们想访问从字符数组的第2个位置开始,或者从中间位置开始,那么我们可以这样:

int main() {char a2[] = { 'A','B','C','D','\0' };char a3[] = "ABCDEF";cout << a2 + 1 << endl;		//BCDprintf("%s\n", a3 + 2);		//CDEFreturn 0;
}

2.1  字符数组的输入输出
// 2.1 字符数组的输入输出int main() {char str[100];char s[100];scanf("%s", s);		 //这里不能加&,数组名代表首元素的地址cin >> str;			 //输入字符串时,遇到空格或者回车就会停止cout << str << endl; //输出字符串时,遇到空格或者回车不会停止printf("%s\n", str);return 0;
}

读入一行字符串,包括空格

//读入一行字符串,包括空格
int main8() {char str[100];gets(str); cout << str << endl;return 0;
}

 虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据。

换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。

fgets()函数原型为:

char *fgets(char *s, int size, FILE *stream);

从stream流中读取size个字符存储到字符指针变量s所指向的内存空间

返回值为一个指针,指向字符串中第一个字符的地址

1.  s:代表要保存到内存空间的首地址,可以是字符数组名,也可以是指向字符数组的字符指针变量名

2. size:代表的是读取字符串的长度

3. stream:表示从何种流中读取,可以是标准输入流stdin,也可以是文件流

 因此,我们可以使用fgets()来帮助我们读取字符串

int main() {char str[100];//从输入流stdin中最多读取100个字符到字符数组str中。//除去末尾的字符串结束符,实际上最多读取99个字符//fgets函数可以读取到空格和'\n'fgets(str, 100, stdin);cout << str << endl;return 0;
}

我们还可以使用cin来读取string类型的字符串,cin输入接触到第一个非空格字符时开始阅读,当遇到下一个字符(空格、制表符、换行符)时,就会停止读取

int main() {string s;printf("输入:\n");cin >> s;printf("输出:\n");cout << s;return 0;
}

 为了避免cin对于空白符的忽略问题,我们可以使用getline函数,getline函数可以读取整行,包括前面和中间的空格,并将其存储在字符串对象中,在输入时,直至遇到'\n'或EOF,才终止一行字符串的输入操作。

getline()函数有4种重载形式,这里我们先介绍1种,后续慢慢讲解

istream& getline(istream& is, string& str);

读取的istream是作为参数 is 传进函数的,读取的字符串保存在string类型的str中。

is : 表示一个输入流,例如cin。

str : 为string类型的引用,用来存储输入流中的流信息。

因此,我们可以使用getline()函数来读取字符串

int main() {string s;getline(cin, s);cout << s << endl;return 0;
}

2.2  字符数组的常用操作

下面几个函数需要引入头文件 #include<string.h>

(1)strlen(str),求字符串的长度

(2)strcmp(a,b),比较2个字符串的大小,a<b返回-1,a==b返回0,a>b返回1。这里的比较方式就是字典序!

(3)strcpy(a,b),将字符串b复制给从a开始的字符数组

下面我们依次来介绍这些函数

①strlen(str),求字符串的长度

// (1)strlen(str),求字符串的长度
int main() {char a[100] = "hello world!";cout << strlen(a) << endl; // 12return 0;
}

②strcmp(a,b),比较2个字符串的大小

// (2)strcmp(a,b),比较2个字符串的大小,
//		a<b时,返回-1;a==b时,返回0;a>b时,返回1int main() {char s1[100], s2[100];scanf("%s%s", s1, s2);             //scanf函数的%s,会自动忽略空格,换行,Tab键cout << strcmp(s1, s2) << endl;return 0;
}

或者

int main() {char s1[100];scanf("%s", s1);cout << strcmp(s1, "abc") << endl;//将s1字符数组里面的内容和"abc"进行比较return 0;
}

③strcpy(a,b),将字符串b复制给从a开始的字符数组

// (3)strcpy(a,b),将字符串b复制给从a开始的字符数组
int main() {char s1[100], s2[100];scanf("%s", s1);strcpy(s2, s1);cout << s2 << endl;return 0;
}

2.3  遍历字符数组中的字符

遍历数组,当然采用for循环了,while循环也可以

//2.3 遍历字符数组中的字符int main() {char a[100] = "hello world!";for (int i = 0; i < strlen(a); i++) {cout << a[i] << endl;}return 0;
}

这种方法行是行,但是每次都要计算strlen(a),花费了很多时间,有没有更省时的方法?

肯定有!把strlen(a)的结果存放在临时变量里面不就可以了~

int main() {char s1[100];scanf("%s", s1);for (int i = 0, len = strlen(s1); i < len; i++)  //将strlen(s1)的结果保存到len中{cout << s1[i] << endl;}return 0;
}

当然了,我们还可以在外面写:

int main() {char s1[100];scanf("%s", s1);int len = strlen(s1);for (int i = 0; i < len; i++) {cout << s1[i] << endl;}return 0;
}

练习1:只出现1次的字符

给定一个只包含小写字母的字符串,请你找出第一个仅出现一次的字符。如果没有,输出"no"。

思路:

①我们可以先定义str数组,用来读取输入的字符串,str数组长度可能会很大很大,所以定义为全局变量。

②再定义num数组,用来统计每个字母出现的次数,字母总数26个,因此,num数组长度为26。下标从0~25.,下标为0表示'a'出现的次数,下标为1表示'b'出现的次数....(相当于num数组是26个字母的映射)

③如何统计每个字母出现的次数呢?很简单,’a'的ASCII码值为97,对应num数组下标为0的位置,'a'出现的次数  = num数组下标为0位置的值;每当'a'出现1次,num[0]++;所以,表达式应为 num[str[i]-'a']

④当num数组出现任一下标的值为1的情况,即num[str[i]-'a'] == 1时,就是仅出现一次的字符。我们只需输出这个字符即可,即str[i],并且终止循环。

⑤如果num数组没有上面④这种情况,输出"no"

本道题代码如下:

//练习1:给定一个只包含小写字母的字符串,
//请找出第一个仅出现1次的字符。
//如果没有,输出"no"int num[26] = { 0 };
char str[10010];int main() {cin >> str;int len = strlen(str);for (int i = 0; i < len; i++) {num[str[i] - 'a']++;}for (int i = 0; i < len; i++) {if (num[str[i] - 'a'] == 1) {cout << str[i] << endl;return 0; //直接main函数结束,无需执行后续代码}}cout<<"no"<<endl;//如果没找到,输出"no"return 0;
}

第二个for循环也可以这样写:

	for (int j = 0; j < 26; j++) {if (num[j] == 1) //如果num数组对应下标位置的值为1{cout << char(j + 'a') << endl;//输出该字符,强转成char类型return 0;}}

练习2:替换字符

把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串

这道题,比较简单。代码如下:

//练习2:把一个字符串中特定的字符全部用给定的字符替换
//得到一个新的字符串int main() {char str[31] = { 0 };scanf("%s", str); //scanf函数的%s,会自动忽略空格,换行,Tab键char c;scanf("\n%c", &c); //scanf函数的%c,任何数据都会被当作一个字符//不管是数字还是空格、回车、Tab键它都会取回for (int i = 0; str[i]; i++) {if (str[i] == c) {str[i] = '#';}}puts(str);return 0;
}

 也可以使用下面这种方法:

int main() {char str[31] = { 0 };cin >> str;	//用cin也可以int len = strlen(str);//strlen函数的参数类型是char*char c;cin >> c;for (int i = 0; i < len; i++) {if (str[i] == c) {str[i] = '#';}}cout << str << endl; //使用cout也可以return 0;
}

三、标准库类型  string

可变长的字符序列,比字符数组更加好用,需要引入头文件:#include<string>

3.1  定义和初始化
//3.1 定义和初始化
int main() {string s1;		    //默认初始化,s1是一个空字符串string s2 = s1;		//s2是s1的副本string s3 = "hiya";	//s3是该字符串字面值的副本string s4(10, 'c');	//s4的内容是 ccccccccccreturn 0;
}
3.2  string上的操作

(1)string的读写

//3.2 string上的操作
//(1)string的读写int main() {string s1, s2;cin >> s1 >> s2;cout << s1 << s2 << endl;return 0;
}

注意:不能用printf直接输出string,需要写成:printf("%s",s.c_str());

(2)使用getline读取一整行

//(2)使用getline读取一整行int main() {string s;getline(cin, s);cout << s << endl;return 0;
}

(3)string 的 empty 和 size 操作(注意 size 是无符号整数,因此 s.size() <= -1 一定成立):

//(3)string的empty和size操作(注意:size是无符号整数,因此s.size()<=-1一定成立):int main() {string s1, s2 = "abc";cout << s1.empty() << endl;  // 1cout << s2.empty() << endl;  // 0cout << s2.size() << endl;   // 3return 0;
}

(4)string 的比较

支持 > < >= <= == != 等所有比较操作,按字典序进行比较

(5)为string对象赋值:

int main() {string s1(10, 'c'), s2; //s1 的内容是cccccccccc;s2是一个空字符串s1 = s2;				//赋值:用s2的副本替换s1的副本//此时s1和s2都是空字符串return 0;
}

(6)两个string对象相加:

//2个string对象相加int main() {string s1 = "abc", s2 = "def";string s3 = s1 + s2; //abcdefs3 += s1 + s2;      //abcdefabcdefcout << s3 << endl;return 0;
}

(7)字面值和string对象相加:

做加法运算时,字面值和字符都会被转化成string对象,因此直接相加就是将这些字面值串联起来:

	string s1 = "hello", s2 = "world";string s3 = s1 + "," + s2 + '!';cout << s3 << endl; //hello,world!

当把string对象和字符字面值及字符串字面值混再一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string:

	string s4 = s1 + ",";		     //正确: 把一个string对象和有一个字面值相加//string s5 = "hello" + ",";     //错误: 两个运算对象都不是string,//本质上是2个const char*类型的指针相加//2个都是字符串常量,肯定是不能改变,不能进行相加string s6 = s1 + "," + "world";    //正确: 每个加法运算都有一个运算符是string//如果从左到右,有一个string类型的,后面才会隐式类型转换//string s7 = "hello" + "," + s2;  //错误: 不能把字面值直接相加,运算是从左到右进行的//从左到右,先是"hello"+","相加,所以不会有隐式类型转换

 3.3  处理string对象中的字符

可以将string对象当成字符数组来处理

//3.3 处理string对象中的字符
//可以将string对象当成字符数组来处理int main() {string s = "hello world";for (int i = 0; i < s.size(); i++) {cout << s[i] << " ";}cout << endl;return 0;
}

或者使用基于范围的for语句 

int main() {string s = "hello world";//范围for//把字符串s里面的值依次赋给efor (auto e : s) {cout << e << " ";}cout << endl;return 0;
}

 如果我们想改变字符串s里面的值,需要在范围for里面传递引用&

int main() {string s = "hello world";for (char& c : s) {c = 'a';}cout << s << endl; //aaaaaaaaaaareturn 0;
}

 练习3:信息加密

密码翻译,输入一个只包含小写字母的字符串,将其中的每个字母替换成它的后继字母,如果原字母是'z',则替换成'a'

emmm,咱们还是来画个图~

OK啦!本道题的代码如下:

//信息加密
int main() {string s;getline(cin, s); //如果用cin,遇到空格,会停止读取//使用getline函数,读取一整行int len = s.size(); //求字符串的长度for (int i = 0; i < len; i++) {if (s[i] >= 'a' && s[i] <= 'z') {s[i] = 'a' + (s[i] - 'a' + 1) % 26;}else if (s[i] >= 'A' && s[i] <= 'Z') {s[i] = 'A' + (s[i] - 'A' + 1) % 26;}}cout << s << endl;return 0;
}

我们还可以使用范围for来优化代码:

int main() {string s;getline(cin, s); //如果用cin,遇到空格,会停止读取//使用getline函数,读取一整行//这里要修改字符串s里面的值,必须传引用&for (auto& e : s) {if (e >= 'a' && e <= 'z') {e = 'a' + (e - 'a' + 1) % 26;}else if (e >= 'A' && e <= 'Z') {e = 'A' + (e - 'A' + 1) % 26;}}cout << s << endl;return 0;
}

练习4:字符串长度

其实这道题,就相当于让我们模拟实现strlen函数。

代码如下:

//求字符串长度
int main() {char s1[100] = { 0 };fgets(s1, 100, stdin);//只能用fgets函数,从标准库中最多读取100个字符存入s1中;直到遇见'\n'为止//并且fgets函数会读取空格和'\n'//scanf("%s", s1);    //不能用scanf函数,因为scanf遇到空格或者换行,停止读取//cin >> s1;	      //不能用cin,因为cin遇到空格或者换行,停止读取int len = 0;//当元素值不是'\0'并且不是'\n',才计入字符串的长度for (int i = 0; s1[i] != '\0' && s1[i] != '\n'; i++) {len++;}cout << len << endl; //没有加上s1[i] != '\n'的判断条件时,写成 cout << len-1 << endl; 也可以return 0;
}

方法二:

int main() {string str;getline(cin, str);  //使用getline函数读取一整行cout << str.size() << endl;//调用size()函数return 0;
}

片尾

今天我们学习了字符串相关知识点,希望这篇文章对友友们有所帮助!!!

求点赞收藏加关注!!!

谢谢大家!!!

相关文章:

C++蓝桥杯基础篇(七)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来一起学习蓝桥杯基础篇&#xff08;七&#xff09;&#xff0c;学习相关字符串的知识&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、字符与整数的联系——ASCII码 每个常用字符都对应一个-128~127的…...

Sass基础

目录 什么是sass? Sass的安装 Sass的编译 Sass的语法&#xff1a; Sass的基本使用: 一、Sass变量&#xff1a; 二、嵌套语法&#xff1a; 三、import的使用&#xff1a; 四、mixin混入和include: 五、extend: 六、注释 七、if和if: 八、for: 总结&#xff1a; 什么是sas…...

Linux文档编辑相关命令详解

Linux文档编辑相关命令 1. grep grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 1.1 语法 grep [options] pattern [files] 1.2 常用选项 -i&#xff1a;忽略大小写进行匹配。-v&#xff1a;反向查找&#xff0c;只打印不匹配的行。-…...

QT实现简约美观的动画Checkbox

*最终效果: * 一共三个文件: main.cpp , FancyCheckbox.h , FancyCheckbox.cpp main.cpp #include <QApplication> #include "FancyCheckbox.h" #include <QGridLayout> int main(int argc, char *argv[]) {QApplication a(argc, argv);QWidget* w new…...

每日学习Java之一万个为什么?[MySQL面试篇]

分析SQL语句执行流程中遇到的问题 前言1 MySQL是怎么在一台服务器上启动的2 MySQL主库和从库是同时启动保持Alive的吗&#xff1f;3 如果不是主从怎么在启动的时候保证数据一致性4 ACID原则在MySQL上的体现5 数据在MySQL是通过什么DTO实现的6 客户端怎么与MySQL Server建立连接…...

git笔记

定义&#xff1a;分布式版本控制工具&#xff0c;免费开源的&#xff0c;快速高效的处理从小到大的项目&#xff0c;git占地面积小&#xff0c;性能快&#xff0c;有廉价的本地库 安装&#xff1a;官网最新版 全部点下一步就行 版本控制工具&#xff1a;使用中央服务器&#…...

Full GC 排查

在 Java 中&#xff0c;Full GC&#xff08;完全垃圾回收&#xff09;会对整个堆&#xff08;包括年轻代和老年代&#xff0c;甚至可能包括永久代/元空间&#xff09;进行垃圾回收&#xff0c;通常会导致较长的停顿&#xff08;STW&#xff0c;Stop-The-World&#xff09;。如果…...

VS2022远程调试Ubuntu中的C++程序

前言 最近想基于星火大模型的SDK开发第一些应用。但是&#xff0c;发现星火的SDK当中Linux版本的比较丰富&#xff0c;Windows 版本支持的比较少。但是&#xff0c;从调试的IDE而言&#xff0c;Visual Studio又是最方便的。所以&#xff0c;考虑采用Visual Studio Ubuntu的形式…...

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 目录 Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 一、简单介绍 二、简单介绍 flutter_screenutil 三、安装 carousel_slider 四、简单案例实现 五、关键代码 六、补…...

【华为OD机考】华为OD笔试真题解析(16)--微服务的集成测试

题目描述 现在有n个容器服务&#xff0c;服务的启动可能有一定的依赖性&#xff08;有些服务启动没有依赖&#xff09;&#xff0c;其次&#xff0c;服务自身启动加载会消耗一些时间。 给你一个 n n n \times n nn的二维矩阵useTime&#xff0c;其中useTime[i][i]10表示服务…...

NCCL AI 分布式训练集合通讯库技术基本原理

目录 文章目录 目录AI 分布式训练NCCL 的简介NCCL 的核心功能NCCL 的基本工作流程NCCL 的集合通信操作方式NCCL 的 API 编程示例 AI 分布式训练 在一个最初的 AI 模型训练场景中&#xff0c;由于模型自身的程序体积、输入的参数量以及样本的数据量都比较有限&#xff0c;一张 …...

算法-回溯篇01-组合

组合 力扣题目链接 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 解题思路 刚开始做回溯的题目&#xff0c;关于回溯的相关知识推荐大家去看代码随想录的视频。 做了几道题&#xff0c;感觉回溯题…...

泵吸式激光可燃气体监测仪:快速精准守护燃气管网安全

在城市化进程加速的今天&#xff0c;燃气泄漏、地下管网老化等问题时刻威胁着城市安全。如何实现精准、高效的可燃气体监测&#xff0c;守护“城市生命线”&#xff0c;成为新型基础设施建设的核心课题。泵吸式激光可燃气体监测仪&#xff0c;以创新科技赋能安全监测&#xff0…...

Lumoz Chain正式上线:AI 时代的新算力破局者

新的叙事和技术突破永远是推动行业前行的核心动力。当下&#xff0c;AI Agent无疑是最炙手可热的赛道之一。 当加密世界将目光投向AI领域时&#xff0c;大多数项目仍停留在以AI为工具或应用场景的层面&#xff0c;试图通过集成AI模型或优化链上功能来吸引用户。然而&#xff0…...

算法之排序算法

排序算法 ♥常见排序算法知识体系详解♥ | Java 全栈知识体系 算法 - 排序 | CS-Notes 面试笔记 十大经典排序算法总结 | JavaGuide...

Java面试第七山!《MySQL索引》

一、索引的本质与作用 索引是帮助MySQL高效获取数据的数据结构&#xff0c;类似于书籍的目录。它通过减少磁盘I/O次数&#xff08;即减少数据扫描量&#xff09;来加速查询&#xff0c;尤其在百万级数据场景下&#xff0c;索引可将查询效率提升数十倍。 核心作用&#xff1a;…...

基于 Rust 与 GBT32960 规范的编解码层

根据架构设计&#xff0c;实现编解码层的代码设计 Cargo.toml 加入二进制序列化支持 # 序列化支持 ... bincode "1.3" # 添加二进制序列化支持 bytes-utils "0.1" # 添加字节处理工具 开始编码 错误处理&#xff08;error.rs&#x…...

二、Redis 安装与基本配置:全平台安装指南 服务器配置详解

Redis 安装与基本配置:全平台安装指南 & 服务器配置详解 Redis 作为高性能的内存数据库,其安装和配置是使用 Redis 的第一步。本篇文章将全面介绍 Redis 的安装方式,覆盖 Windows、Linux、Docker 环境,并详细讲解 Redis 的基础配置,包括 持久化、日志、端口设置等。此…...

⭐算法OJ⭐矩阵的相关操作【动态规划 + 组合数学】(C++ 实现)Unique Paths 系列

文章目录 62. Unique Paths动态规划思路实现代码复杂度分析 组合数学思路实现代码复杂度分析 63. Unique Paths II动态规划定义状态状态转移方程初始化复杂度分析 优化空间复杂度状态转移方程 62. Unique Paths There is a robot on an m x n grid. The robot is initially lo…...

基于 Elasticsearch 和 Milvus 的 RAG 运维知识库的架构设计和部署落地实现指南

最近在整理一些业务场景的架构设计和部署落地实现指南 先放一个 【基于RAG的运维知识库 (ElasticSearch + Milvus) 的详细实现指南】,其中包含了详尽的技术实现细节、可运行的示例代码、原理分析、优缺点分析和应用场景分析。 架构描述: 基于RAG的运维知识库 (ElasticSearch…...

山西青年杂志山西青年杂志社山西青年编辑部2025年第3期目录

青年争鸣 教师发展中心行动转向的价值意蕴分析框架研究与启示 于宝证;李军红;郑钰莹;何易雯; 产教融合视角下职业本科工商管理专业人才培养模式探析 杜芯铭; 青年教育研究 教育数字化背景下高职院校的课堂教学研究 张晨; 统筹职业教育、高等教育、继续教育协同…...

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...

【GenBI优化】提升text2sql准确率:建议使用推理大模型,增加重试

引言 Text-to-SQL(文本转 SQL)是自然语言处理(NLP)领域的一项重要任务,旨在将自然语言问题自动转换为可在数据库上执行的 SQL 查询语句。这项技术在智能助手、数据分析工具、商业智能(BI)平台等领域具有广泛的应用前景,能够极大地降低数据查询和分析的门槛,让非技术用…...

LLVM - 编译器前端 - 学习将源文件转换为抽象语法树(二)

一:处理消息 在一个庞大的软件(比如编译器)中,我们不希望将消息字符串分散在各个地方。如果需要修改消息内容或将其翻译成另一种语言,最好将它们集中存放在一个地方!目前缺少的是对消息的集中定义。下面我们看看来如何实现它。 一种简单的方法是,每条消息都有一个 ID(一…...

T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取

目录 介绍目录视图 获取表和架构名称获取列信息 信息架构视图 获取表信息获取列信息 系统存储过程和函数 获取对象列表获取对象详细信息获取约束信息获取数据库属性信息 总结引用 介绍 在 SQL 数据库管理中&#xff0c;获取数据库对象的元数据信息是至关重要的。元数据提供了…...

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大&#xff0c;游戏玩家对游戏资讯、攻略、评测等内容的需求日…...

批量提取 Word 文档中的页面

如何将 Word 文档中的页面提取出来形成一个新的文档呢&#xff1f;比如将 Word 文档中的第一页提取出来、将 Word 文档中的最后一页提取出来、再或者将 Word 文档中的中间几页提取出来等等。人工的处理肯定非常的麻烦&#xff0c;需要新建 Word 文档&#xff0c;然后将内容复制…...

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链&#xff0c;继续使用基于 langgraph 链 &#xff0c;对结构化数据库 SQlite 进行查询的方法。该系统建立以后&#xff0c;我们不需要掌握专业的 SQL 技能&#xff0c;可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…...

csrf与ssrf学习笔记

一、CSRF&#xff08;Cross-Site Request Forgery&#xff09; 1. 定义 攻击目标&#xff1a;利用用户已登录的合法身份&#xff0c;在用户不知情的情况下发起恶意请求。 核心条件&#xff1a;受害者需已登录目标系统&#xff0c;且浏览器会自动携带身份凭证&#xff08;如 C…...

安装Maven配置阿里云地址 详细教程

下面以安装Maven公认最稳定版本&#xff08;使用最多&#xff09;3.6.1为例 1、访问maven官网 Maven官网 直接跳转Maven3.6.1 Maven3.6.1 2、点击下载 跳转页面后继续单击 Maven 3 archives 下载后解压放到自己的软件目录下 ~ 2.配置本地仓库 在目录下创建repo文件夹 &…...

我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品

基础的物品大家都会做了对吧?包括武器的释放技能,这次来点难度,让物品的贴图呈现动画效果和扔出后显示3D立体效果,这个3D立体效果需要先学习blockbench,学习如何制作贴图。 Blockbench Blockbench是一个用于创建和编辑三维模型的免费软件,特别适用于Minecraft模型的设计…...

火语言RPA--PDF提取表格

【组件功能】&#xff1a;提取PDF文档指定位置表格 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待提取表格的PDF文件的完整路径。 提取位置 全部、指定页、指定范围3种位置供选择。 PDF文件密码 支持T或# 打开PDF文件的密码。 页码 支持T或# 提取指定页的页…...

【开源-线程池(Thread Pool)项目对比】

一些实现**线程池&#xff08;Thread Pool&#xff09;**功能的开源项目的对比分析。 线程池功能的开源项目 项目名称语言优点缺点适用场景开源代码链接ThreadPoolC简单易用&#xff0c;代码简洁&#xff1b;适合快速原型开发。功能较为基础&#xff0c;不支持动态调整线程数…...

JavaScript系列05-现代JavaScript新特性

JavaScript作为网络的核心语言之一&#xff0c;近年来发展迅速。从ES6(ECMAScript 2015)开始&#xff0c;JavaScript几乎每年都有新的语言特性加入&#xff0c;极大地改善了开发体验和代码质量。本文主要内容包括&#xff1a; ES6关键特性&#xff1a;解构赋值与扩展运算符&am…...

【二.提示词工程与实战应用篇】【3.Prompt调优:让AI更懂你的需求】

最近老张在朋友圈秀出用AI生成的国风水墨画,隔壁王姐用AI写了份惊艳全场的年终总结,就连楼下小卖部老板都在用AI生成营销文案。你看着自己跟AI对话时满屏的"我不太明白您的意思",是不是怀疑自己买了台假电脑?别慌,这可能是你的打开方式不对。今天咱们就聊聊这个…...

C++学习之C++初识、C++对C语言增强、对C语言扩展

一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 &#xff0c;理解为打开一个房间&#xff0c;房间里有我们所需…...

基于eRDMA实测DeepSeek开源的3FS

DeepSeek昨天开源了3FS分布式文件系统, 通过180个存储节点提供了 6.6TiB/s的存储性能, 全面支持大模型的训练和推理的KVCache转存以及向量数据库等能力, 每个客户端节点支持40GB/s峰值吞吐用于KVCache查找. 发布后, 我们在阿里云ECS上进行了快速的复现, 并进行了性能测试, ECS…...

写Oracle表耗时25分钟缩短到23秒——SeaTunnel性能优化

本文主要给大家介绍JDBC Source批处理任务动态切分优化&#xff0c;希望大家批评指正 JDBC Source 如果配置了table_path 和 partition_column&#xff0c;引擎会对数据进行动态切分&#xff0c;可以通过分析样本数据优化切分区间&#xff0c;规避数据倾斜问题。 目前发现任务…...

Golang的图形用户界面设计

一、Golang图形用户界面设计的基本概念 了解Golang 也称为Go语言&#xff0c;是一种由Google开发的开源编程语言。它具有良好的并发性&#xff0c;能够更好地利用多核处理器&#xff0c;同时也拥有丰富的标准库和强大的工具链。 什么是图形用户界面 图形用户界面&#xff08;GU…...

蓝桥杯备赛Day12 动态规划1基础

动态规划 动态规划基础 动态规划将复杂问题分解成很多重叠的子问题&#xff0c;再通过子问题的解得到整个问题的解 分析步骤: 确定状态:dp[i][j]val,“到第i个为止&#xff0c;xx为j的方案数/最小代价/最大价值” 状态转移方程: 确定最终状态 要求: (1)最优子结构 (2)无后效性…...

我的AI工具箱Tauri版-通用音频转文本

本模块支持FunAsr和FasterWhisper两种模式&#xff0c;可批量处理音频与视频文件&#xff0c;自动生成txt文本与srt字幕&#xff0c;满足多种应用场景需求。 工具内置FunAsr&#xff0c;无需额外参数调整&#xff0c;特别适用于中文语音的高质量转录&#xff0c;确保识别准确率…...

C#—Settings配置详解

C#—Settings配置详解 在C#项目中&#xff0c;全局配置通常指的是应用程序的设置&#xff08;settings&#xff09;&#xff0c;这些设置可以跨多个类或组件使用&#xff0c;并且通常用于存储应用程序的配置信息&#xff0c;如数据库连接字符串、用户偏好设置等。 Settings配置…...

机器学习算法——分类任务

算法&#xff1a; 1、决策树 2、随机森林 3、梯度提升树 4、逻辑回归 5、支持向量机SVM 6、K近邻 KNN 7、朴素贝叶斯 8、多层感知机 9、统一分类 10、比较总结 11、完整代码 1、决策树 1.1 Decision Tree Analysis (C4.5,CART,CHAID)决策树 算法树结构特征选择连续值处理缺失…...

聆听PostgreSQL数据库的使用

参考&#xff1a;&#xff08;1&#xff09;零基础入门PostgreSQL教程 &#xff08;2&#xff09;菜鸟教程 文章目录 一、PostgreSQL是什么&#xff1f;二、基本使用1.下载2.操作&#xff08;1&#xff09;数据库&#xff08;2&#xff09;表 一、PostgreSQL是什么&#xff1f;…...

C# 装箱(Boxing)与拆箱(Unboxing)

C# 装箱&#xff08;Boxing&#xff09;与拆箱&#xff08;Unboxing&#xff09; 在 C# 中&#xff0c;装箱和拆箱是与值类型&#xff08;如结构体&#xff09;和引用类型&#xff08;如类&#xff09;之间的转换相关的操作。它们是类型系统的一部分&#xff0c;但如果不正确使…...

vue实例

// vue应用通过createApp函数创建一个新的应用实例&#xff0c;相当于根组件 import { createApp } from vue import App from ./App.vue // 在一个vue项目当中&#xff0c;有且只有一个vue的实例对象 const appcreateApp(App) // App:根组件 // 实例必须调用了.mount&am…...

Spring Boot的启动流程

Spring Boot 的启动流程是一个复杂且有序的过程&#xff1a; 创建SpringApplication实例 — 调用run方法 — 启动完成(发布应用启动事件&#xff0c;配置环境&#xff0c;创建ApplicationContext&#xff0c;准备ApplicationContext&#xff0c;刷新ApplicationContext[【创建B…...

springboot整合pagehelper实现mybatis分页

1.依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.0</version></dependency><dependency><groupId>com.github.pagehelper<…...

Qt信号与槽机制

‌Qt信号与槽机制&#xff08;Signal and Slot Mechanism&#xff09;‌是Qt框架中用于对象间通信的一种机制。信号和槽是Qt的核心特性之一&#xff0c;它们允许对象在特定事件发生时发送信号&#xff0c;并由其他对象通过槽函数进行响应。这种机制不仅简化了对象间的通信&…...

Qt空项目代码解释

一、 背景 创建的是一个 QWidget 项目。 二、main.cpp 1、图片 2、代码解释 &#xff08;1&#xff09;QApplication Qt 图形化界面中一定有 QApplication &#xff08;2&#xff09;Widget w; 是 QWidget 的子类。 &#xff08;3&#xff09;w.show(); 继承父类的显示…...