前言
本刷题系列是我为了蓝桥杯前几天可以再系统性思考一下真题所做,所以部分内容会很简洁。如果能够帮助到你,我也会很开心!!
题目一
截图
卡住的点
输入格式
scanf("%d:%d:%d %d:%d:%d (+%d)",&h1, &m1, &s1, &h2, &m2, &s2, &day);
第二题
截图
if (str.substr(i, 单词的长度) == "单词")
思考
1.两者同时出现,Alice可能在Bob之前出现,也可能在Bob之后出现,所以要分两种情况
2.如何判断Alice和Bob是一个独立的单词
3.思路:先把Bob和Alice中的需要的位置分别存入到不同的数组中去,然后遍历一方的数组元素,维护好另一方的距离范围
第三题
截图
思考
更考的是输入输出格式的灵活应用(写在总结部分了)
总结
1.找单独的单词的方法
if (str.substr(i, 单词的长度) == "单词"&&!(check(i+单词长度)))
check函数的目的是判断当前单词是否是字母,因为如果是字母的话,就说明他后面还跟着字母,不是一个独立的单词
bool check(char h) {
if(h >= 'A' && h <= 'Z' || h >= 'a' && h <= 'z')
return true;
else
return false;
}
2.输入字符串
string str;
getline(cin, str);
3.将首字母变换大小写
if ((S[i - 1] == ' ' || i == 0) && S[i] >= 'a' && S[i] <= 'z')
{
cout << char(S[i] + 'A' - 'a');
}
4.如果有多个空格只输出一个
if (S[i - 1] == ' ' && S[i] == ' ')
{
continue;
}
5.将字母和数字用下划线分开
(输出都是一样的格式是因为两种情况下划线都会在s[i-1]和s[i]中输出)
if (S[i - 1] >= '0' && S[i - 1] <= '9' && S[i] >= 'a' && S[i] <= 'z')
{
cout << '_' << S[i];//数字在字母前
}
else if (S[i] >= '0' && S[i] <= '9' && S[i - 1] >= 'a' && S[i - 1] <= 'z')
{
cout << '_' << S[i];//数字在字母后
}
6.检查是否是独立单词
if ((!i || !check(str[i - 1])) && (i + 单词长度 == str.size() || !check(str[i + 单词长度])))
反思
遇到输出问题,可以考虑scanf和cin的灵活使用