PTA 天梯赛习题集 L1-059 敲笨钟

敲笨钟

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。

现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。

输入格式:
输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。

输出格式:
对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。

输入样例:
5

xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong.
tian sheng wo cai bi you yong, qian jin san jin huan fu lai.
xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long.
zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong.
ren xian gui hua luo, ye jing chun shan kong.

输出样例:

xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong.
Skipped
xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong.
Skipped
Skipped

AC代码(C++)

题目第四个测试点有个坑。题给的条件中下半句诗至少有 3 个字。
这说明上半句可能就一个字,拼音连3个都不到,有这种情况。得考虑这个。
第四测试点大概就是这种

1
wo, have a ong.

注意避开这个坑不然第四个测试点不通过。

这个题每个句子中都有“,”和“.”而且“,”与“.”和“ong”是挨在一起的,这个就是突破点

其他详细解法思路我写在代码注释里了。大概思路就是找“,”“.”这两个符号判断符号前面三个字符是不是“ong”.如果全是那么这个句子就是“ong”押韵了。然后替换句子后三个单词为“qiao ben zhong!”即可。

找后三个单词的方法笔者用的是找倒数第三个空格这样,倒数第三个空格后面开始就是倒数第三个单词的开始。

至于计算后面三个单词的长度的方法就是“.”的下标位置和倒数第三个空格的下标位置差就是倒数三个单词的长度。把这个范围内地所有内容换成“qiao be n zhong”即可。

AC代码(C++)

#include <iostream>
#include <string>

using namespace std;

int main()
{

	string str;
	int n;
	size_t tmp;			//临时存储倒数第三个单词前空格的坐标
	cin >> n;
	getchar();			//这里会有一个多余的回车得吃掉
	
	for (int i = 0; i < n; i++)
	{
		getline(cin, str);		//接受一整行带空格的字符串

		//str.find(",") >= 3 && str.find(".") >= 3  //防止出现特殊情况字符不够数
		//特使情况数据
		//1
	    //ab, hello word ong.
		//这个时候输出Skipped

		//str.compare(str.find(",") - 3, 3, "ong") //找到","让后往前数三个字符再进行与"ong"做比较
		//str.compare(str.find(".") - 3, 3, "ong") //找到"."让后往前数三个字符再进行与"ong"做比较
		//上面两个条件符合了那么就是我们要找的ong押韵了
		if (str.find(",") >= 3 && str.find(".") >= 3 && !str.compare(str.find(",") - 3, 3, "ong") && !str.compare(str.find(".") - 3, 3, "ong"))
		{
			//找到倒数第三个空格位置也就是倒数第三个单词前面
			tmp = str.rfind(" ", str.rfind(" ", str.rfind(" ") - 1) - 1);
			//str.rfind(".") - tmp     //"."和倒数第三个空格坐标差就是后三个单词的长度
			//把后面三个单词替换成"qiao ben zhong."
			str.replace(tmp + 1, str.rfind(".") - tmp, "qiao ben zhong.");
			//输出替换后的句子
			cout << str << endl;
		}
		else
			cout << "Skipped\n";
	}
	return 0;
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7-8 (15分) 微博上有个自称“大V”的家伙,每天催促码农们爱惜身体早点睡觉。为了增加的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘”。 现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“”。 输入格式: 输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。 输出格式: 对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。 输入样例: 5 xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong. tian sheng wo cai bi you yong, qian jin san jin huan fu lai. xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long. zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong. ren xian gui hua luo, ye jing chun shan kong. 输出样例: xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong. Skipped xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong. Skipped Skipped

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值