一道大水题。。。黄色的纯模拟到现在也只见了一次
先放上传送门吧
原题传送门
首先写这道题之前,要先普及以下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)如果减号左右两边一边是数字,一边是字母,输出两个字符夹着减号
有了这些就好了,我们就可以写出一个大模拟###