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

STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(二)

目录

一、B2121 最长最短单词 - 洛谷

算法代码: 

代码分析

变量定义

输入处理

单词长度计算

更新最长和最短单词的长度

输出最长单词

输出最短单词

评测记录:​编辑

 二、B2122 单词翻转 - 洛谷

 算法代码:

代码分析

引入头文件和定义类型

主函数

字符串定义

输入循环

反转输出

换行

返回值

评测记录:​编辑 

三、B2123 字符串 p 型编码 - 洛谷 

算法代码: 

代码分析

引入头文件

变量定义

主函数开始

读取输入

初始化第一个字符

遍历字符串

判断字符是否相同

输出最后一组字符

返回值

总结

评测记录:​编辑 

 四、B2124 判断字符串是否为回文 - 洛谷

方法一:算法代码(reverse翻转直接判断)

方法二:算法代码

代码分析

引入头文件

使用命名空间

主函数开始

读取字符串

检查回文

输出结果

总结

评测记录:

五、B2125 最高分数的学生姓名 - 洛谷 

算法代码: 

代码思路

包含头文件

定义数据结构

全局变量

比较函数

主函数

返回语句

复杂度分析

总结

评测记录:​编辑

六、B2126 连续出现的字符 - 洛谷 

算法代码:

代码思路

包含头文件

定义变量

读取输入

遍历字符串

无连续字符的情况

复杂度分析

注意事项

改进后的代码示例

评测记录: ​编辑

七、B3640 T3 句子反转 - 洛谷

算法代码:

代码思路

包含头文件

定义变量

读取输入

处理字符串

输出格式

复杂度分析

总结

评测记录: 

八、B3654 [语言月赛202208] 影子字符串 - 洛谷 

 算法代码: 

代码思路

包含头文件

定义变量

读取输入

检查重复

复杂度分析

改进建议

改进后的代码示例

说明

解释

示例

代码示例

总结

评测记录: 

九、B3663 [语言月赛202209] Luogu Academic - 洛谷

算法代码: 

代码思路

包含头文件

定义变量

读取输入

遍历字符串

输出结果

复杂度分析

总结

评测记录:

十、B3674 [语言月赛202210] 标题修改 - 洛谷 

算法代码:

代码解析

包含头文件

主函数

读取输入

处理字符串

输出结果

注意事项

改进后的代码示例

总结

评测记录: 


一、B2121 最长最短单词 - 洛谷

算法代码: 

#include <iostream>
#include <string>
using namespace std;
string a;
int sum=0,maxx=-100,maxb,minb,minn=1000000;
int main(){getline(cin,a);//带空格输入for(int i=0;i<a.length();i++){if(a[i]==' '||a[i]==','||a[i]=='.'){//如果发现标点符号和空格,代表单词结束if(maxx<sum){//如果单词长度突破目前发现的最长长度maxb=i;//把最长单词的结束点更新,i就是结束点maxx=sum;//把最长单词的长度更新}if(minn>sum){//如果单词长度低于目前发现的最短长度minb=i;//更新最短单词结束点minn=sum;//更新最短长度}sum=0;//sum清空,以便下次操作}else{sum++;//如果是字母,长度加一}}for(int i=maxb-maxx/*从开始位置开始输出*/;i<maxb/*到结束位置结束*/;i++){cout<<a[i];}cout<<endl;for(int i=minb-minn;i<minb;i++){//最短单词同理cout<<a[i];}return 0;
}

代码分析

  1. 变量定义

    • string a;:用于存储输入的字符串。

    • int sum=0;:用于计算当前单词的长度。

    • int maxx=-100;:记录发现的最长单词的长度,初始值设置为一个非常小的负数,以确保任何实际单词的长度都会大于这个值。

    • int maxb;:记录最长单词的结束位置(索引)。

    • int minb;:记录最短单词的结束位置(索引)。

    • int minn=1000000;:记录发现的最短单词的长度,初始值设置为一个非常大的数,以确保任何实际单词的长度都会小于这个值。

  2. 输入处理

    getline(cin, a); // 读取带空格的整行输入
    
  3. 单词长度计算

    • 使用一个循环遍历字符串 a,逐个字符进行处理:

    for(int i=0; i<a.length(); i++) {// 检查是否是空格或标点符号if(a[i]==' ' || a[i]==',' || a[i]=='.') {
    
  4. 更新最长和最短单词的长度

    • 当遇到空格或标点符号时,表示一个单词的结束:

      • 更新最长单词

        if(maxx < sum) {maxb = i; // 更新最长单词的结束点maxx = sum; // 更新最长单词的长度
        }
        
      • 更新最短单词

        if(minn > sum) {minb = i; // 更新最短单词的结束点minn = sum; // 更新最短单词的长度
        }
        
    • 更新完成后,将 sum 重置为 0,以便下一次计算新的单词长度:

    sum = 0; // 清空当前单词的长度
    
    • 如果当前字符是字母,则增加 sum

    else {sum++; // 当前单词长度加一
    }
    
  5. 输出最长单词

    • 计算并输出第一个最长单词:

    for(int i=maxb-maxx; i<maxb; i++) {cout << a[i]; // 输出最长单词
    }
    cout << endl;
    
  6. 输出最短单词

    • 计算并输出第一个最短单词:

    for(int i=minb-minn; i<minb; i++) {cout << a[i]; // 输出最短单词
    }

评测记录:

 二、B2122 单词翻转 - 洛谷

 算法代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){string s;//定义字符串。while(cin>>s){//输入字符串。for(int i=s.size()-1;i>=0;i--){//循环输出。cout<<s[i];}cout<<endl;//换行。}return 0;
}

代码分析

  1. 引入头文件和定义类型

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    • #include<bits/stdc++.h>:包含了 C++ 标准库中几乎所有的头文件,方便使用各种功能。尽管这不是最佳实践,但在竞赛或快速测试中很常用。

    • #define ll long long:定义了 ll 为 long long 类型,虽然在这段代码中并未使用。

  2. 主函数

    int main() {
    
    • int main() 是程序的入口点。

  3. 字符串定义

    string s; // 定义字符串。
    
  4. 输入循环

    while(cin >> s) { // 输入字符串。
    
    • 使用 while(cin >> s) 循环读取输入的字符串,直到输入结束(例如,遇到 EOF)。这意味着程序可以处理多行输入,如果每行只包含一个单词。

  5. 反转输出

    for(int i = s.size() - 1; i >= 0; i--) { // 循环输出。cout << s[i];
    }
    
    • s.size() - 1:获取字符串的最后一个字符的索引。

    • for 循环从字符串的最后一个字符开始,向前遍历到第一个字符,逐个输出字符,从而实现反转效果。

  6. 换行

    cout << endl; // 换行。
    
    • 在每次反转输出完成后,打印一个换行符,以便于在控制台上的输出格式清晰。

  7. 返回值

    return 0;
    
    • 返回 0,表示程序正常结束。

评测记录: 

三、B2123 字符串 p 型编码 - 洛谷 

算法代码: 

#include <iostream>
#include <string>
using namespace std;string a;
char flag;
int ans = 1;//注意,这里要设成1!int main(){cin >> a;flag = a[0];for (int i = 1; i < a.size(); ++ i){if (a[i] == a[i - 1]) {ans += 1;}else {cout << ans << flag;ans = 1;flag = a[i];}}cout << ans << flag << endl;//最后还要再输出return 0;
}

代码分析

  1. 引入头文件

    #include <iostream>
    #include <string>
    using namespace std;
    
    • 引入了 iostream 和 string 头文件,以便使用输入输出流和字符串操作。

  2. 变量定义

    string a;       // 用于存储输入的字符串
    char flag;      // 用于跟踪当前正在计数的字符
    int ans = 1;    // 计数器,初始值设为1,因为至少有一个字符
    
  3. 主函数开始

    int main() {
    
  4. 读取输入

    cin >> a; // 读取输入字符串
    
    • cin >> a; 用于读取一个不包含空格的字符串。

  5. 初始化第一个字符

    flag = a[0]; // 将第一个字符存入 flag
    
    • flag 用于保存当前正在计数的字符。

  6. 遍历字符串

    for (int i = 1; i < a.size(); ++i) {
    
    • 从第二个字符开始遍历字符串(索引从1开始),对每个字符进行处理。

  7. 判断字符是否相同

    if (a[i] == a[i - 1]) {ans += 1; // 如果当前字符与前一个字符相同,计数器加1
    }
    else {cout << ans << flag; // 输出当前字符的计数和字符ans = 1;             // 重置计数器flag = a[i];        // 更新 flag 为当前字符
    }
    
    • 如果当前字符与前一个字符相同,增加 ans 的值。

    • 如果不同,输出当前字符的计数及字符,并重置 ans 为1(因为当前字符至少出现了一次),将 flag 更新为当前字符。

  8. 输出最后一组字符

    cout << ans << flag << endl; // 最后一组字符的计数和字符也要输出
    
    • 循环结束后,最后一组字符的计数和字符需要单独输出,因为在最后一次的不同字符判断中,这部分不会被输出。

  9. 返回值

    return 0;
    
    • 返回0,表示程序正常结束。

总结

  • 功能:该程序将连续相同字符压缩为其字符和出现次数的形式。例如,将输入的字符串 "aaabbc" 转换为 "3a2b1c"

  • 思路:使用一个循环遍历字符串,利用一个计数器 ans 和一个字符标记 flag 来跟踪当前字符及其连续出现的次数。

  • 最后输出:注意最后一个字符的计数和字符需要在循环结束后单独输出,以确保输出的完整性。

评测记录: 

 四、B2124 判断字符串是否为回文 - 洛谷

方法一:算法代码(reverse翻转直接判断)

#include<bits/stdc++.h>
using namespace std;
string a,b;int main() {cin >> a;b = a;reverse(a.begin(), a.end());if(a == b) printf("yes\n");else printf("no\n");return 0;
}

方法二:算法代码

#include <bits/stdc++.h> //建议选择万能头文件,避免写程序前打很多头文件
using namespace std;
int main()
{string s;//定义string类(字符串)cin>>s;for(int i=0,j=s.length()-1;i<=s.length()/2;i++,j--){if(s[i]!=s[j]){cout<<"no"<<endl;return 0; }}//判断回文的循环cout<<"yes"<<endl;return 0;
}

代码分析

  1. 引入头文件

    #include <bits/stdc++.h>
    
    • 使用了 bits/stdc++.h 这个头文件,它包含了几乎所有的标准 C++ 库,非常便利,适用于快速编程和竞赛,但在实际的项目中可能不是最佳实践,因为它可能造成不必要的编译开销。

  2. 使用命名空间

    using namespace std;
    
    • 使用标准命名空间,以便后续使用标准库的功能时无需加上 std:: 前缀。

  3. 主函数开始

    int main() {
    
  4. 读取字符串

    string s; // 定义字符串
    cin >> s; // 输入字符串
    
    • 使用 cin >> s; 读取输入的字符串,注意这里读取的字符串不能包含空格。

  5. 检查回文

    for(int i = 0, j = s.length() - 1; i <= s.length() / 2; i++, j--) {if(s[i] != s[j]) {cout << "no" << endl; // 如果不相等,输出 "no"return 0; // 提前结束程序}
    }
    
    • 使用一个 for 循环来检查字符串的前半部分和后半部分的字符是否相等。

      • i 从 0 开始,表示字符串的前半部分。

      • j 从最后一个字符开始,表示字符串的后半部分。

    • i <= s.length() / 2 确保只检查到字符串的中间位置。

    • 如果发现有任何不相等的字符,立即输出 “no” 并返回 0 结束程序,表示该字符串不是回文。

  6. 输出结果

    cout << "yes" << endl; // 如果循环结束,说明是回文,输出 "yes"
    return 0;
    
    • 如果循环顺利结束,表示字符串是回文,则输出 "yes"。

总结

  • 功能:该程序用于判断一个字符串是否是回文字符串。

  • 实现方法:通过双指针技术(一个指向字符串的开头,一个指向字符串的末尾)来逐个比较字符,直到中间为止。

  • 时间复杂度:该算法的时间复杂度为 O(n),其中 n 是字符串的长度,因为需要遍历字符串的一半进行比较。

评测记录:

五、B2125 最高分数的学生姓名 - 洛谷 

算法代码: 

#include<bits/stdc++.h>
using namespace std;// 定义一个结构体用于存储学生的姓名和分数
struct node
{string name; // 学生姓名int score;   // 学生成绩
} a[105]; // 定义一个结构体数组,最多存储 104 个学生信息int n, i; // 学生数量和循环变量// 比较函数,用于按照分数降序排列
bool cmp(node c, node b)
{return c.score > b.score; // 分数大的靠前
}int main()
{cin >> n; // 输入学生数量for (i = 1; i <= n; i++){cin >> a[i].score >> a[i].name; // 输入每个学生的分数和姓名}sort(a + 1, a + 1 + n, cmp); // 对学生数组进行排序cout << a[1].name; // 输出分数最高的学生姓名return 0; // 程序正常结束
}

代码思路

  1. 包含头文件

    • #include<bits/stdc++.h>:这是一个常用的包含所有标准库头文件的快捷方式,虽然在实际编程中不推荐使用,但在竞赛中常见。

  2. 定义数据结构

    • 使用 struct node 定义一个结构体 node,用于存储学生的姓名和分数。该结构体有两个成员:

      • string name:存储学生的姓名。

      • int score:存储学生的分数。

  3. 全局变量

    • node a[105]:定义了一个结构体数组 a,可以存储最多 104 个学生的信息(因为数组索引从 1 开始)。

    • int n, i:定义了学生数量 n 和循环变量 i

  4. 比较函数

    • bool cmp(node c, node b):定义一个比较函数,用于 sort 函数排序。该函数根据分数进行排序,分数高的排在前面(即降序排序)。实现方式是比较两个节点的 score 字段。

  5. 主函数

    • cin >> n:读取学生的数量。

    • 使用 for 循环从 1 到 n,依次读取每个学生的分数和姓名,并存储到数组 a 中。

    • sort(a + 1, a + 1 + n, cmp):使用 sort 函数对数组 a 进行排序。排序范围是从 a[1] 到 a[n],使用之前定义的比较函数 cmp

    • cout << a[1].name:输出分数最高的学生的姓名,即排序后数组的第一个元素的 name 字段。

  6. 返回语句

    • return 0:表示程序成功结束。

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是学生的数量。排序的时间复杂度为 O(n log n),由于使用了快速排序或其他高效排序算法。

  • 空间复杂度:O(n),主要用于存储学生的姓名和分数。

总结

        这段代码实现了对学生分数的排序,并找到分数最高的学生。通过使用结构体存储学生信息、比较函数进行排序和标准输入输出,代码结构清晰且高效。适合用于基本的排序和查找问题。

评测记录:

六、B2126 连续出现的字符 - 洛谷 

算法代码:

​
#include<bits/stdc++.h>
using namespace std;char a[1001]; // 用char类型存储字符串int main()
{int n, cnt = 1; // 定义计数器cin >> n >> a; // 输入连续出现的次数和字符串for (int i = 1; i <= strlen(a); i++) // 遍历整个数组{cin >> a[i]; // 输入当前字符if (a[i] == a[i - 1]) cnt++; // 如果与前一个字符相同,计数器+1else cnt = 1; // 否则归1if (cnt == n) // 找到了连续出现n次的字符{cout << a[i]; // 输出该字符return 0; // 结束程序}}cout << "No"; // 如果没有找到,输出"No"return 0; // 程序正常结束
}

代码思路

  1. 包含头文件

    • #include<bits/stdc++.h>:快速包含所有标准库头文件,常用于竞赛编程。

  2. 定义变量

    • char a[1001]:定义一个字符数组 a,用于存储输入的字符串,最多可以存储 1000 个字符。

    • int n, cnt = 1:定义 n(表示连续出现次数)和 cnt(计数器,初始值为 1)。

  3. 读取输入

    • cin >> n >> a:首先读取一个整数 n,然后读取字符串 a

  4. 遍历字符串

    • 使用 for 循环遍历字符串,从 1 到 strlen(a)(字符串的长度)。注意,a[0] 是第一个字符,因此从 1 开始。

    • 在循环内部:

      • cin >> a[i]:读取下一个字符并存储在数组 a[i] 中。

      • if(a[i] == a[i-1]) cnt++:如果当前字符等于前一个字符,则计数器 cnt 加 1。

      • else cnt = 1:如果当前字符与前一个字符不相同,则重置 cnt 为 1。

      • if(cnt == n):如果计数器 cnt 达到 n,说明找到了连续出现的字符。

        • cout << a[i]:输出该字符,并返回 0,结束程序。

  5. 无连续字符的情况

    • 如果遍历完字符串后仍未发现有字符连续出现 n 次,输出 "No"。

复杂度分析

  • 时间复杂度:O(m),其中 m 是字符串的长度。遍历字符串的时间复杂度是线性的。

  • 空间复杂度:O(1),除了输入的字符串外,没有使用额外的空间。

注意事项

  1. 输入方式:代码中使用 cin >> a[i] 存储字符,这可能导致输入字符被覆盖,建议使用 cin 一次性读取字符串,而不是在循环中逐个字符读取。

  2. 字符串遍历:字符串的索引从 0 开始,初始的遍历条件需要注意,确保不超出数组边界。

  3. 字符串长度:使用 strlen 时需要包含 <cstring> 头文件,此外,使用 std::string 可能更安全和灵活。

改进后的代码示例

为了解决上述问题,以下是一个改进的代码示例,正确输入字符串并遍历:

#include <bits/stdc++.h>
using namespace std;int main() {int n, cnt = 1;string a; // 使用 string 类型代替 char 数组cin >> n >> a; // 输入连续出现的次数和字符串// 从第二个字符开始遍历for (int i = 1; i < a.length(); i++) {if (a[i] == a[i - 1]) cnt++; // 如果与前一个字符相同,计数器+1else cnt = 1; // 否则归1if (cnt == n) { // 找到了连续出现n次的字符cout << a[i]; // 输出该字符return 0; // 结束程序}}cout << "No"; // 如果没有找到,输出"No"return 0; // 程序正常结束
}

这个改进版本避免了字符数组的边界问题,并使用了更为安全和灵活的 string 类型。

评测记录: 

七、B3640 T3 句子反转 - 洛谷

算法代码:

​
#include<bits/stdc++.h>
using namespace std;int n; // 记录字符串数量
string s[1007]; // 存储字符串的数组int main() {while(cin >> s[++n]); // 输入字符串,直到 EOF--n; // 调整 n,减去最后一次自增多余的值// 从最后一个字符串开始处理for(int i = n; i >= 1; i--) {// 遍历当前字符串的每个字符for(int j = 0; j < (int)s[i].size(); j++) {// 将小写字母转换为大写if(s[i][j] >= 'a' && s[i][j] <= 'z') s[i][j] -= 'a' - 'A';// 将大写字母转换为小写else if(s[i][j] >= 'A' && s[i][j] <= 'Z') s[i][j] -= 'A' - 'a'; }// 检查字符串是否以数字开头if(s[i][0] >= '0' && s[i][0] <= '9') {// 如果是数字,输出字符串的反向for(int j = (int)s[i].size() - 1; j >= 0; j--) cout << s[i][j];} else {// 否则正常输出字符串cout << s[i];}// 如果不是最后一个字符串,则输出空格if(i != 1) cout << " ";}return 0; // 程序正常结束
}​

代码思路

  1. 包含头文件

    • #include<bits/stdc++.h>:快速包含所有标准库头文件,常用于竞赛编程。

  2. 定义变量

    • int n:用于计数,记录输入字符串的数量。

    • string s[1007]:定义一个字符串数组 s,容量为 1006(因为索引从 1 开始),用于存储输入的字符串。

  3. 读取输入

    • 使用 while(cin >> s[++n]) 循环读取字符串,直到输入结束。n 从 0 开始自增,最后 --n 是为了将 n 的值调整为实际的字符串数量(因为最后一次循环后 n 增加了一次)。

  4. 处理字符串

    • 外层循环 for(int i = n; i >= 1; i--):从最后一个输入的字符串开始处理。

    • 内层循环 for(int j = 0; j < (int)s[i].size(); j++):遍历每个字符串的字符。

      • 如果字符是小写字母('a' 到 'z'),则将其转换为大写字母。

      • 如果字符是大写字母('A' 到 'Z'),则将其转换为小写字母。

    • 检查字符串的第一个字符:

      • 如果它是数字('0' 到 '9'),则反向输出这个字符串。

      • 否则,正向输出这个字符串。

  5. 输出格式

    • 在输出每个字符串之后,如果不是最后一个字符串,则输出一个空格。

复杂度分析

  • 时间复杂度:O(N * M),其中 N 是字符串的数量,M 是字符串的平均长度。需要遍历所有字符串及其字符。

  • 空间复杂度:O(N * M),用于存储字符串数组。

总结

        这段代码实现了对输入字符串的处理,包括大小写转换和条件反转。通过使用字符串数组、循环和字符操作,代码结构清晰且功能明确。在实际的应用中,这种处理字符串的方法可以广泛用于多种文本处理任务。

评测记录: 

八、B3654 [语言月赛202208] 影子字符串 - 洛谷 

 算法代码: 

#include<bits/stdc++.h>
using namespace std;int cnt; // 记录字符串数量
string s[507]; // 存储字符串的数组int main()
{while(true) // 无限循环,直到遇到 "0"{++cnt; // 计数器自增cin >> s[cnt]; // 读取字符串if(s[cnt] == "0") // 如果输入为 "0" 则退出break;bool flag = false; // 用于标记是否有重复// 检查之前输入的字符串是否与当前字符串重复for(int i = 1; i < cnt; i++){if(s[i] == s[cnt]) // 如果发现重复{flag = true; // 设置标记为 truebreak; // 退出循环}}if(flag == false) // 如果没有重复{cout << s[cnt]; // 输出当前字符串}}return 0; // 程序结束
}

代码思路

  1. 包含头文件

    • #include<bits/stdc++.h>:包含所有标准库头文件,常用于竞赛编程。

  2. 定义变量

    • int cnt:用于计数,记录输入字符串的数量。

    • string s[507]:定义一个字符串数组 s,可以存储最多 506 个字符串(因为索引从 1 开始)。

  3. 读取输入

    • 使用 while(true) 循环不断读取字符串。

    • cin >> s[cnt] 从标准输入中读取字符串并存储到数组 s 中,同时 cnt 自增。

    • 当读取到字符串 “0” 时,使用 break 退出循环。

  4. 检查重复

    • 在每次读取新的字符串后,定义一个布尔变量 flag,初始值为 false

    • 使用嵌套循环 for(int i=1;i<cnt;i++) 遍历之前输入的字符串,检查是否与当前字符串 s[cnt] 重复:

      • 如果找到重复的字符串,将 flag 设置为 true,并跳出循环。

    • 如果 flag 仍为 false,则说明当前字符串未重复,输出该字符串。

复杂度分析

  • 时间复杂度:O(N^2),其中 N 是输入的字符串数量。在最坏情况下,需检查每个字符串与之前所有字符串的重复情况。

  • 空间复杂度:O(N),用于存储字符串数组。

改进建议

        在处理字符串重复问题时,使用集合(如 std::set)可以更高效地判断字符串是否已经存在,从而将时间复杂度降低到 O(N) 的平均情况。以下是改进后的代码示例:

改进后的代码示例

#include<bits/stdc++.h>
using namespace std;int main() {set<string> unique_strings; // 定义一个集合用于存储唯一字符串string input;while(true) {cin >> input; // 读取输入字符串if(input == "0") // 如果输入为 "0" 则退出break;// 使用集合的 insert 方法插入字符串// 如果插入成功,说明是唯一的,输出字符串if(unique_strings.insert(input).second) {cout << input; // 输出当前唯一字符串}}return 0; // 程序结束
}

说明

  • 在改进后的代码中,使用了 std::set 来存储唯一字符串。insert 方法返回一个 pair,其中第二个元素为 true 表示插入成功(即该字符串是新的,之前没有重复)。

  • 这种方法不仅代码更简洁,而且提高了查找和插入的效率。

重点:根据上面的方法,我们下面来回顾一下pair

在 C++ STL(标准模板库)中,std::pair 是一个用于存储一对值的模板结构。它的定义如下:

template <class T1, class T2>
struct pair {T1 first;   // 第一个值T2 second;  // 第二个值
};

解释

  • firstpair 的第一个元素,通常用于存储某个主要的信息。

  • secondpair 的第二个元素,通常用于存储与第一个元素相关的信息。

示例

在 C++ 的 STL 中,std::set::insert 方法返回一个 std::pair,该 pair 的第二个值(second)用于表示插入操作的结果:

  • 如果插入成功,即元素是新的且没有重复,则 second 为 true

  • 如果插入失败,即元素已经存在于集合中,则 second 为 false

代码示例

以下是一个简单的示例,演示如何使用 std::pair 以及 std::set::insert 的返回值:

#include <iostream>
#include <set>
using namespace std;int main() {set<string> mySet; // 创建一个字符串集合string input;// 输入一些字符串while (true) {cout << "Enter a string (or '0' to stop): ";cin >> input;if (input == "0") break; // 输入 "0" 结束循环// 尝试插入字符串auto result = mySet.insert(input); // result 是一个 std::pair// result.first 是插入的字符串// result.second 表示插入是否成功if (result.second) {cout << "Inserted: " << result.first << endl; // 输出插入的字符串} else {cout << "Duplicate found: " << result.first << endl; // 输出重复的字符串}}return 0;
}

总结

        在这个例子中,我们使用 std::set::insert 方法插入字符串,并通过 result.second 判断字符串是否已经存在。result.first 将返回刚刚插入的字符串。通过这种方式,我们可以方便地处理插入操作的结果。

评测记录: 

九、B3663 [语言月赛202209] Luogu Academic - 洛谷

算法代码: 

#include<bits/stdc++.h>
using namespace std;string S; // 存储输入的字符串
int ans = 0; // 计数器,初始值为 0int main()
{cin >> S; // 读取输入字符串// 遍历字符串,查找 "luogu" 的出现次数for (int i = 0; i + 4 < (int)S.size(); i++) {// 检查当前字符及后面的四个字符if (S[i] == 'l' && S[i + 1] == 'u' && S[i + 2] == 'o' && S[i + 3] == 'g' && S[i + 4] == 'u') {ans++; // 找到一个 "luogu",计数加一}}cout << ans << endl; // 输出计数结果return 0; // 程序结束
}

代码思路

  1. 包含头文件

    • #include<bits/stdc++.h>:这是一个在竞赛编程中常用的包含所有标准库头文件的方式。

  2. 定义变量

    • string S:用于存储输入的字符串。

    • int ans:用于记录子串 “luogu” 出现的次数,初始值为 0。

  3. 读取输入

    • 使用 cin >> S 读取输入的字符串。

  4. 遍历字符串

    • 使用 for (int i = 0; i + 4 < (int)S.size(); i++) 循环遍历字符串。这里 i + 4 < (int)S.size() 确保我们在检查子串 “luogu” 时不会越界,因为 “luogu” 的长度是 5。

    • 在循环内部,检查当前字符及其后四个字符是否组成子串 "luogu":

      • if (S[i] == 'l' && S[i + 1] == 'u' && S[i + 2] == 'o' && S[i + 3] == 'g' && S[i + 4] == 'u')

    • 如果匹配,则 ans++,计数增加。

  5. 输出结果

    • 使用 cout << ans << endl 输出 “luogu” 在字符串中出现的次数。

复杂度分析

  • 时间复杂度:O(N),其中 N 是字符串 S 的长度。代码需要遍历字符串的每个字符一次。

  • 空间复杂度:O(1),只使用了常数个额外的变量(S 和 ans)。

总结

        这段代码有效地找出了字符串中 “luogu” 子串的出现次数。逻辑简单明了,适合用于基本的字符串查找操作。不过,如果要处理更复杂的模式匹配或查找问题,可以考虑使用更高效的算法,如 KMP 算法或 Rabin-Karp 算法。

评测记录:

十、B3674 [语言月赛202210] 标题修改 - 洛谷 

算法代码:

#include<bits/stdc++.h>
using namespace std;int main()
{string s;while(cin>>s){int len =s.length();for(int i= 0;i<len;++i){if(i%2==0){s[i]-=32;}     }cout<<s<<' ';}return 0;
}

代码解析

  1. 包含头文件

    • #include<bits/stdc++.h>:快速包含所有标准库头文件,常用于竞赛编程。

  2. 主函数

    • int main():程序的入口。

  3. 读取输入

    • while(cin >> s):循环读取输入的字符串 s,直到没有更多的输入(例如遇到文件结束符 EOF)。

  4. 处理字符串

    • int len = s.length();:获取当前字符串的长度。

    • for(int i = 0; i < len; ++i):遍历字符串的每个字符。

      • if(i % 2 == 0):检查当前索引 i 是否为偶数。

        • s[i] -= 32;:将偶数位置的字符转换为大写字母。这里用的是 ASCII 码的转换方式,'A' 的 ASCII 值是 65'a' 的 ASCII 值是 97,因此 s[i] -= 32 实际上是将小写字母转换为对应的大写字母。

  5. 输出结果

    • cout << s << ' ';:输出处理后的字符串,并在字符串后加一个空格。

注意事项

  • ASCII 转换:这种方法依赖于 ASCII 字符集,因此只适用于在 ASCII 范围内的字符(例如英文字母)。如果输入包含非 ASCII 字符(如中文),则可能不会按预期工作。

  • 字符串大小写处理:虽然通过 s[i] -= 32 可以将小写字母转换为大写,但更好的做法是使用 C++ 提供的标准库函数 toupper(),可以提高代码的可读性和可维护性。

改进后的代码示例

下面是一个改进后的代码示例,使用 std::toupper() 函数来处理字符大小写:

#include <bits/stdc++.h>
using namespace std;int main()
{string s;while (cin >> s) // 读取输入字符串{int len = s.length(); // 获取字符串长度for (int i = 0; i < len; ++i){if (i % 2 == 0) // 检查索引是否为偶数{s[i] = toupper(s[i]); // 将字符转换为大写}}cout << s << ' '; // 输出处理后的字符串}return 0; // 程序结束
}

总结

  • 这段代码有效地将输入字符串中偶数索引位置的字符转换为大写字母,并在每个字符串后加一个空格。整体逻辑简单明了,适合用于基本的字符串处理。在实际应用中,建议使用标准库函数以提高代码的可读性与安全性。

评测记录: 

相关文章:

STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(二)

目录 一、B2121 最长最短单词 - 洛谷 算法代码&#xff1a; 代码分析 变量定义 输入处理 单词长度计算 更新最长和最短单词的长度 输出最长单词 输出最短单词 评测记录&#xff1a;​编辑 二、B2122 单词翻转 - 洛谷 算法代码&#xff1a; 代码分析 引入头文件和定…...

P1055 [NOIP 2008 普及组] ISBN 号码(java)【AC代码】

每一本正式出版的图书都有一个 ISBN 号码与之对应&#xff0c;ISBN 码包括 9 位数字、1 位识别码和 3 位分隔符&#xff0c;其规定格式如 x-xxx-xxxxx-x&#xff0c;其中符号 - 就是分隔符&#xff08;键盘上的减号&#xff09;&#xff0c;最后一位是识别码&#xff0c;例如 0…...

JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别?

JavaScript如何创建一个对象&#xff1f;对象字面量和构造函数创建对象有什么区别&#xff1f; JavaScript 创建对象的方式 在 JavaScript 中&#xff0c;有多种方式可以创建对象&#xff0c;这里主要介绍对象字面量和构造函数这两种常见的方式。 1. 对象字面量 对象字面量…...

【量化科普】Sharpe Ratio,夏普比率

【量化科普】Sharpe Ratio&#xff0c;夏普比率 &#x1f680;&#x1f680;&#x1f680;量化软件开通&#x1f680;&#x1f680;&#x1f680; &#x1f680;&#x1f680;&#x1f680;量化实战教程&#x1f680;&#x1f680;&#x1f680; 在量化投资领域&#xff0c;…...

知识蒸馏知识点

1基于kl散度计算,学生模型需要用log_softmax处理 2 为了避免温度对梯度的影响,loss*T**2 操作目的教师 / 学生输出除以 软化概率分布,暴露类别间关系损失乘以 抵消温度对梯度的缩放,维持梯度量级稳定,确保训练收敛性 import torch import torch.nn.functional as F# 原…...

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本&#xff1a; 2. springboot项目搭建 可以集成在自己的项目里&#xff0c;也可以到 spring.io 生成一个项目 生成的话&#xff0c;如下…...

【MySQL】MySQL表的增删改查(进阶)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住

文章目录 引言I 毛坯房装修的全流程**1. 装修前准备****1.1 确定装修预算****1.2 选择装修方式****1.3 选择装修公司****1.4 办理装修手续****2. 设计阶段****2.1 量房****2.2 设计方案****2.3 确认方案****3. 施工阶段****3.1 主体拆改****3.2 水电改造****3.3 防水工程****3.…...

JavaScript系列(79)--Web Worker 高级应用

Web Worker 高级应用 &#x1f504; Web Worker 为JavaScript提供了真正的多线程能力&#xff0c;让我们能够在后台线程中执行复杂的计算而不阻塞主线程。今天让我们深入探讨Web Worker的高级应用。 Web Worker 概述 &#x1f31f; &#x1f4a1; 小知识&#xff1a;Web Work…...

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用&#xff0c;旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率&#xff0c;还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系&#xff0c;包括感…...

该如何搭建高效的跨境网络专线?

在如今这个全球化的商业环境中&#xff0c;跨境网络专线成为了企业与个人实现高效、安全跨国通信的重要工具。大家好&#xff0c;在接下来的内容中&#xff0c;我将深入为您探讨跨境网络专线的概念、特点以及搭建流程&#xff0c;帮助您更好地理解和利用这一技术。 一、什么是…...

网络运维学习笔记 017HCIA-Datacom综合实验01

文章目录 综合实验1实验需求总部特性 分支8分支9 配置一、 基本配置&#xff08;IP二层VLAN链路聚合&#xff09;ACC_SWSW-S1SW-S2SW-Ser1SW-CoreSW8SW9DHCPISPGW 二、 单臂路由GW 三、 vlanifSW8SW9 四、 OSPFSW8SW9GW 五、 DHCPDHCPGW 六、 NAT缺省路由GW 七、 HTTPGW 综合实…...

Redis数据结构-String字符串

1.String字符串 字符串类型是Redis中最基础的数据结构&#xff0c;关于数据结构与要特别注意的是&#xff1a;首先Redis中所有的键的类型都是字符串类型&#xff0c;而且其他集中数据结构也都是在字符串类似基础上进行构建&#xff0c;例如列表和集合的元素类型是字符串类型&a…...

个人简历html网页模板,科技感炫酷html简历模板

炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…...

【Python爬虫(39)】掌控全局:分布式爬虫的任务管理与监控之道

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

输入框元素覆盖冲突

后端响应中的 "trainingKbGroupName": "基础死型" 通过searchForm2.initFormData(rowData[0]);操作会把基础死型四个字填充到<div class"col-sm-5 form-group"> <label class"col-sm-3 control-label">知识点分组名称<…...

R语言学习笔记——确定指标权重:层次分析法/熵权法/CRITIC方法

本文介绍使用R语言确定指标权重的方法&#xff0c;包括&#xff1a;层次分析法、熵权法和CRITIC方法&#xff0c;内容包含了逆向指标正向化处理。 1、层次分析法 #######层次分析法###### ###几何平均法求权重 options(digits 2) library(tidyverse)macro <- tibble(x1c(…...

前端面试之Box盒子布局:核心知识与实战解析

目录 引言&#xff1a;布局能力决定前端高度 一、盒模型基础&#xff1a;看得见的像素战争 1. 标准盒模型 vs IE盒模型 2. 核心组成公式 3. 视觉格式化模型 二、传统布局三剑客 1. 浮动布局&#xff08;Float Layout&#xff09; 2. 定位布局&#xff08;Position Layou…...

前端VUE+后端uwsgi 环境搭建

1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的&#xff0c;uwsgi完全可以完成整个的和浏览器交互的流程&#xff1b;在nginx上加上安全性或其他的限制&#xff0c;可以达到保护程序的作用&#xff1b;uWSGI本…...

保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek

要在Postman中访问Ollama API并调用DeepSeek模型&#xff0c;你需要遵循以下步骤。首先&#xff0c;确保你有一个有效的Ollama服务器实例运行中&#xff0c;并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级&#xff01;使用Ollama本地部署DeepSeek-R1大模型 并java…...

【python】pip命令合集

文章目录 1. 包安装与卸载2. 依赖管理与文件操作3. 包下载与构建4. 配置与缓存管理5. 高级调试与日志6. 虚拟环境集成7. 哈希验证与安全8. 实验性功能&#xff08;可能不稳定&#xff09;9. 其他实用命令参数大全&#xff08;全局常用参数&#xff09;示例场景 conda: 【python…...

【鸿蒙开发】第四十章 Form Kit(卡片开发服务)

目录 1 概述 1.1 卡片使用场景 1.2 服务卡片架构 1.3 亮点/特征 1.4 开发模式 1.5 与相关Kit的关系 1.6 约束限制 2 ArkTS卡片运行机制 2.1 实现原理 2.2 ArkTS卡片的优势 2.3 ArkTS卡片的约束 3 ArkTS卡片相关模块 4 ArkTS卡片开发指导 4.1 创建一个ArkTS卡片 …...

汽车自动驾驶辅助L2++是什么?

自动驾驶辅助级别有哪些&#xff1f; 依照SAE&#xff08;SAE International&#xff0c;Society of Automotive Engineers国际自动机工程师学会&#xff09;的标准&#xff0c;大致划分为6级&#xff08;L0-L5&#xff09;&#xff1a; L0人工驾驶&#xff1a;即没有驾驶辅助…...

微信小程序消息推送解密

package com.test.main.b2b;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Arrays;/*** author * version 1.0* description: 解谜微信小…...

java项目之城市公园信息管理系统的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的城市公园信息管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 城市公园信息…...

EasyRTC:基于WebRTC与P2P技术,开启智能硬件音视频交互的全新时代

在数字化浪潮的席卷下&#xff0c;智能硬件已成为我们日常生活的重要组成部分&#xff0c;从智能家居到智能穿戴&#xff0c;从工业物联网到远程协作&#xff0c;设备间的互联互通已成为不可或缺的趋势。然而&#xff0c;高效、低延迟且稳定的音视频交互一直是智能硬件领域亟待…...

【前端框架】vue2和vue3的区别详细介绍

Vue 3 作为 Vue 2 的迭代版本&#xff0c;在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别&#xff1a; 响应式系统 Vue 2 实现原理&#xff1a;基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时&#xff0c;Vue 会遍历…...

23.1 WebBrowser控件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 WebBrowser控件类似于IE浏览器的文档界面&#xff08;事实上IE也是使用的这个控件&#xff09;&#xff0c;它提供了显示网页及支持…...

从0-1搭建mac环境最新版

从0-1搭建mac环境 先查看自己的芯片信息 bash uname -mbash-3.2$ uname -m arm64这里是自己的型号安装brew xcode-select --install xcode-select -p /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” source /Users/lanren/.…...

Docker-技术架构演进之路

目录 一、概述 常见概念 二、架构演进 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 三、尾声 一、概述 在进行技术学习过程中&am…...

堆、优先队列、堆排序

堆&#xff1a; 定义&#xff1a; 必须是一个完全二叉树&#xff08;完全二叉树&#xff1a;完全二叉树只允许最后一行不为满&#xff0c;且最后一行必须从左往右排序&#xff0c;最后一行元素之间不可以有间隔&#xff09; 堆序性&#xff1a; 大根堆&#xff1a;每个父节点…...

C语言之宏定义

目录 前言 一、宏定义前操作 二、引用自定义.h文件 三、宏定义#define 四、对比typedef的差异 五、替换一个函数或表达式 六、嵌套宏替换 七、用宏和typedef创建一个“布尔型数据 八、定义有参数的宏 总结 前言 C语言中的宏定义是一种预处理指令&#xff0c;用来定义常量、函数…...

大语言模型基础

简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各类应用。AI大模型主要分为三类:大语言模型、CV大模型…...

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体&#xff0c;当输入的值为负数时&#xff0c;会自动显示红色字体&#xff0c;对于数值或者金额输入时该功能就非常有用了。 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.co…...

Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解

Web 自动化测试提速利器&#xff1a;Aqua 的 Web Inspector &#xff08;检查器&#xff09;使用详解 前言简介一、安装二、Web Inspector 的使用2.1 获取元素定位器&#xff08;Locators&#xff09;2.2 将定位器添加到代码2.3 验证定位器2.4 处理 Frames (框架) 总结 前言 Je…...

23种设计模式 - 空对象模式

模式定义 空对象模式&#xff08;Null Object Pattern&#xff09;是一种行为型设计模式&#xff0c;通过用无操作的空对象替代null值&#xff0c;消除客户端对空值的检查&#xff0c;避免空指针异常。其核心是让空对象与真实对象实现相同接口&#xff0c;但空对象不执行实际逻…...

【mysql80 安装】mysql8.0.31 安装修改3306端口

在离线安装 MySQL 时&#xff0c;可以通过修改 MySQL 的配置文件来更改默认的 3306 端口。以下是具体步骤&#xff1a; 1、vim /etc/my.cnf 打开配置文件后&#xff0c;找到 [mysqld] 部分&#xff0c;这是 MySQL 服务的配置区域。在该部分中&#xff0c;找到或添加以下内容&a…...

基于eBPF的全栈可观测性系统:重新定义云原生环境诊断范式

引言&#xff1a;突破传统APM的性能桎梏 某头部电商平台采用eBPF重构可观测体系后&#xff0c;生产环境指标采集性能提升327倍&#xff1a;百万QPS场景下传统代理模式CPU占用达63%&#xff0c;而eBPF直采方案仅消耗0.9%内核资源。核心业务的全链路追踪时延从900μs降至18μs&a…...

C语言基础学习指南:从零入门到实战应用——适合零基础学习者与进阶巩固

目录 一、C语言概述与开发环境搭建 二、核心语法与数据类型 三、控制结构与运算符 四、函数与模块化编程 五、指针与内存管理 六、实践建议与资源推荐 结语 一、C语言概述与开发环境搭建 C语言是一种高效、灵活的通用编程语言&#xff0c;广泛应用于系统开发、嵌入式系…...

软件架构设计:架构风格

一、架构风格概述 定义 架构风格是对软件系统整体结构和组织方式的抽象描述&#xff0c;提供了一套通用的设计原则和模式。 作用 提高系统的可维护性、可扩展性和可复用性。帮助开发团队在设计和实现过程中保持一致性和规范性。 常见架构风格 分层架构、MVC架构、微服务架构、…...

为啥vue3设计不直接用toRefs,而是reactive+toRefs

Vue 3 设计中将 reactive 和 toRefs 结合使用而非直接使用 toRefs&#xff0c;主要基于以下设计考量&#xff1a; 1. 响应式粒度的不同需求 reactive 适用于对象整体响应式 reactive 会为整个对象创建响应式代理&#xff0c;自动追踪对象内部所有属性的变化。这种设计适用于需要…...

go 网络编程 websocket gorilla/websocket

在 Go 语言中&#xff0c;你可以使用标准库中的 net/http 包和第三方库 gorilla/websocket 来实现一个 WebSocket 服务器。gorilla/websocket 库提供了对 WebSocket 协议的高级抽象&#xff0c;使得处理 WebSocket 连接变得相对简单。 package mainimport ("fmt"&qu…...

【微服务】springboot远程docker进行debug调试使用详解

目录 一、前言 二、线上问题常用解决方案 2.1 微服务线上运行中常见的问题 2.2 微服务线上问题解决方案 2.3 远程debug概述 2.3.1 远程debug原理 2.3.2 远程debug优势 三、实验环境准备 3.1 搭建springboot工程 3.1.1 工程结构 3.1.2 引入基础依赖 3.1.3 添加配置文…...

CORS跨域问题常见解决办法

1.引言 在现代前端开发中&#xff0c;跨域资源共享&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是一种通过设置 HTTP 头来允许或阻止不同源之间的资源访问的机制。浏览器出于安全考虑&#xff0c;默认情况下会阻止跨域请求。本文将详细介绍 CORS 的工作原理、…...

并查集算法篇上期:并查集原理及实现

引入 那么我们在介绍我们并查集的原理之前&#xff0c;我们先来看一下并查集所应用的一个场景&#xff1a;那么现在我们有一个长度为n的数组&#xff0c;他们分别属于不同的集合&#xff0c;那么现在我们要查询数组当中某个元素和其他元素是否处于同一集合当中&#xff0c;或者…...

树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络

假设之前已经配置了 在eth0接口配置了192.168.0.100&#xff0c;现在要在同一接口&#xff08;例如 eth0&#xff09;上添加 192.168.1.100&#xff1a; 直接编辑 /etc/NetworkManager/system-connections/ 中相应的连接文件&#xff08;该文件的文件名通常与连接名称相同&…...

「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件

PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件&#xff0c;以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性&#xff0c;如颜色、字体大小、样式和粗细。…...

Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. 环境准备1.1安装 Python1.2选择开发环境1.3安装 MySQL 数据库1.4 安装 pymysql 库 2. 连接数据库3. 数据库基本操作3.1 创建数据库3.2 创建表3.3 插入数据3.…...

Websocket——心跳检测

1. 前言&#xff1a;为什么需要心跳机制&#xff1f; 在现代的实时网络应用中&#xff0c;保持客户端和服务端的连接稳定性是非常重要的。尤其是在长时间的网络连接中&#xff0c;存在一些异常情况&#xff0c;导致服务端无法及时感知到客户端的断开&#xff0c;可能造成不必要…...

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言&#xff1a;金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时&#xff0c;其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中&#xff0c;量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…...