不是很难的一道题,但是注意坑!
L1-059 敲笨钟
分数 20
作者 陈越
单位 浙江大学
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。
#include<iostream>
#include<string>
using namespace std;
int main() {
string s;
int N;
cin >> N;
getchar();
for (int i = 0; i < N; i++) {
getline(cin, s);
int pos=s.find(",");
string ong1,ong2;
if (pos < 3) { //注意上半句长度
cout << "Skipped";
if (i != N - 1) cout << endl;
continue;
}
ong1 = s.substr(pos - 3, 3);
ong2 = s.substr(s.size() - 4, 3);
if (ong1 != "ong" || ong2 != "ong") cout << "Skipped";
else {
for (int j = 0; j < 3; j++) {
int pos1 = s.rfind(" "); //从后向前删去3个字,一空格代表一字
s.erase(pos1);
}
s += " qiao ben zhong.";
cout << s;
}
if (i != N - 1) cout << endl;
}
return 0;
}
题目的输入格式描述:
输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。
也就是说上半句可能没有字,因此需要这段代码
if (pos < 3) {
cout << "Skipped";
if (i != N - 1) cout << endl;
continue;
}
否则会失去一个测试点
进行特判后
涉及长度时,要注意目标对象的下标是否会超限!