【蓝桥杯冲刺省一,省一看这些就够了-C++版本】蓝桥杯C++字符串及相关练习题

蓝桥杯历年省赛真题

点击链接免费加入题单

字符串

常见字符串函数与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)比如两个字符串 abcdabdd 比较大小。 从第一个字符开始逐位比较,第一个字符不相等,谁的ASCII码值小谁的字典序就小。若第一个相等,继续逐位比较后续字符。比较到字母c < 字母d,所以第一个字符串 abcd 字典序较小。

(2)再比如 histhistory 比较大小。若逐位比较都相等,但其中一个没有后续的字符了,则较短的串 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;
}
排列字母(蓝桥杯Python2022B组省赛)

杂项

结构体排序

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值