蓝桥杯历年省赛真题
点击链接免费加入题单
字符串
常见字符串函数与reverse
// 最常用的操作
str.size();//返回字符串长度
str.length();//返回字符串长度
str.empty();//检查 str 是否为空,为空返回 1,否则返回 0
str[n];//存取 str 第 n + 1 个字符
str.at(n);//存取 str 第 n + 1 个字符(如果溢出会抛出异常)
// 反转
reverse(str.begin(), str.end());
// 查找
str.find("ab");//返回字符串 ab 在 str 的位置
str.find("ab", 2);//在 str[2]~str[n-1] 范围内查找并返回字符串 ab 在 str 的位置
str.rfind("ab", 2);//在 str[0]~str[2] 范围内查找并返回字符串 ab 在 str 的位置
if(str.find("ab")!=string::npos)
{ cout << "下标为:" << str.find("ab"); }
// 子串
str.substr(3); // 返回 [3] 及以后的子串
str.substr(2, 4); // 返回 str[2]~str[2+(4-1)] 子串(即从[2]开始4个字符组成的字符串)
str.substring(5, 10); // 返回 str[5]~str[9] 子串(不包含结尾)
// 插入
str.insert(2, "sz");//从 [2] 位置开始添加字符串 "sz",并返回形成的新字符串
str.insert(2, "abcd", 3);//从 [2] 位置开始添加字符串 "abcd" 的前 3 个字符,并返回形成的新字符串
str.insert(2, "abcd", 1, 3);//从 [2] 位置开始添加字符串 "abcd" 的前 [2]~[2+(3-1)] 个字符,并返回形成的新字符串
// 删除
str.erase(3);//删除 [3] 及以后的字符,并返回新字符串
str.erase(3, 5);//删除从 [3] 开始的 5 个字符,并返回新字符串
// 替换
str.replace(2, 4, "sz");//返回把 [2]~[2+(4-1)] 的内容替换为 "sz" 后的新字符串
str.replace(2, 4, "abcd", 3);//返回把 [2]~[2+(4-1)] 的内容替换为 "abcd" 的前3个字符后的新字符串
// 追加
str = str + "abc";
str.push_back('a');//在 str 末尾添加字符'a'
str.append("abc");//在 str 末尾添加字符串"abc"
字符串编号(蓝桥杯Java2020B组省赛第一场)
ASCII码值、字母大小写转换、’0‘~’9‘
// 数字转字符: 'A'(65) 'a'(97) '0'(48)
char A = char(65);
char a = char(97);
char c = 'a' + 2; // 'c' = 'a' + 2
char seven = '0' + 7; // '7' = '0' + 7
// 字符转数字
int a = 'a'; // a: 97
int A = 'A'; // A:65
int t = 't' - 'a'; // 计算字母间差值
int seven = '7' - '0';
stringstream
stringstream
主要是用在字串分割,可以先用 clear()
以及 str()
将字符串读入并进行分割,再用 >> 把内容输出,例如:
string s;
stringstream ss;
int a, b, c;
getline(cin, s);
ss.clear();
ss.str(s);
ss >> a >> b >> c;
stringstream练习
- 代码
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
stringstream ss;
int n, i, sum, a;
cin >> n;
getline(cin, s);
for(i = 1;i <= n;i++){
getline(cin, s);
ss.clear();
ss.str(s);
sum = 0;
while(1) {
ss >> a;
if (ss.fail()) break;
sum += a;
}
cout << sum << endl;
}
}
字典序
什么是字典序:所谓字典序就是以ASCII码排序。
(1)比如两个字符串 abcd
和 abdd
比较大小。 从第一个字符开始逐位比较,第一个字符不相等,谁的ASCII码值小谁的字典序就小。若第一个相等,继续逐位比较后续字符。比较到字母c < 字母d,所以第一个字符串 abcd
字典序较小。
(2)再比如 hist
和 history
比较大小。若逐位比较都相等,但其中一个没有后续的字符了,则较短的串 hist
字典序较小。
(3)使用 sort()
可以对字符串进行字典序排序,字符按ASCII码值由小到大排列
string str = "agfdvdsgds";
sort(str.begin(),str.end());
拓拓拼字符
#include<bits/stdc++.h>
using namespace std;
string s[100];
int main() {
int n,l;
cin >> n >> l;
for (int i = 0; i < n; i++) cin >> s[i];
sort(s, s + n);
for (int i = 0; i < n; i++) cout << s[i];
cout << endl;
return 0;
}