洛谷【题解】P1098 字符串的展开

本文详细解析了洛谷P1098题目的解题思路,涉及字符串处理和ASCII码的使用。针对不同参数p1、p2、p3,介绍了7种不同的输出情况,并给出了关键的turn函数实现。文章还分享了在处理毒瘤数据点时遇到的挑战以及解决方案。
摘要由CSDN通过智能技术生成

一道大水题。。。黄色的纯模拟到现在也只见了一次
先放上传送门吧

原题传送门

首先写这道题之前,要先普及以下ASCII码。。。(这忒么简单了)
每一个字符都有自己的ASCII码值,例如A的ASCII码值就是65
计算ASCII码值的方法

	char a;            //要计算ASCII码值的字符
	int b;               //存放ASCII码值
	cin>>a;
	b=int(a);        //强制转换,就能达到求ASCII码值的目的
	cout<<b;

将数字转换为字符也十分简单,只需将程序倒一倒

	int a;                  //要求这个字符的ASCII码值
	char b;              //存放字符
	cin>>a;
	b=char(a);       //强制转换
	cout<<b;

好了,言归正传:
这道模拟题耗费了我一个星期的时间。。。主要是毒瘤的数据点。有些数据点在题目中完全没有讲到,让我浪费了5次下载测试数据的机会。。。
先来讲一下题意吧:
输入:
输入三个参数 p1,p2,p3,输入一串字符串。

输出(按7种情况输出):
将减号替换成下面7种情况:

(1)关于参数p1(以后其他参数的例子全部是用p1=1这个参数)
当p1=1时,当减号右边的字母的ASCII码大于减号左边字母的ASCII码时,按照26字母的顺序,将减号替换成左边字母到右边字母中间的所有小写字母
例:a-d 输出为abcd
当p1=2时,把p1=1中的替换出的小写字母转换为大写字母
例:a-d 输出为aBCd
当p1=3时,把p1=1中的替换出的小写字母转换为星号
例:a-d 输出为a**d

(2)关于参数p2
参数p2较简单,当p2=k时,在p1中所有替换的字符重复输出k次。
例:a-d p2=2 输出为abbccd

(3)关于参数p3
参数p3也十分简单。
当p3=1时,不改变所有输出方式,也就是完全不用管
当p3=2时,输出的所有字符倒叙输出
例:a-d p2=1,p3=2 输出为acbd

(4)当在字符串开头出现减号时,无论多少个,都重新输出这些减号
(5)当减号两边的两个字母相同时,输出两个字母中间夹着减号
(6)当减号右边的字符的ASCII码刚好是左边字符ASCII码的值+1,输出两个字符
(7)当减号左边的字符的ASCII码大于右边字符的ASCII码,输出两个字符夹着减号
(8)如果减号左右两边一边是数字,一边是字母,输出两个字符夹着减号

有了这些就好了,我们就可以写出一个大模拟###

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值