看着很复杂的一道模拟题,虽然写起来确实不怎么复杂,但细节还是比较多的.
主要分析的就是-的处理情况,总体上就是展开和不展开(直接输出)的判断.
需要展开的情况:
- 前后有字符,且均为字母或数字
- 字符后者-前者的ascii值>=1
(=1时仍然是展开,但什么都不输出.我是用了个特判,但想想好像也不需要)
那么不展开的情况就是非上述情况了.包括首尾,前后不为相同类型,甚至还有一堆-相连的一个测试点.
我还纳闷为啥还有90分这种情况
总体上还是判断写的太渣了,但我又懒得改,开摆!
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
int p1,p2,p3;
cin >> p1 >> p2 >> p3 >> s;
for(int i = 0 ; i < s.size() ; i++)
{
if(s[i] != '-' || !i || i == s.size() - 1 || s[i - 1] == '-' || s[i + 1] == '-')
{
cout << s[i];
continue;
}
if(s[i + 1] - s[i - 1] >= 1 && ((s[i + 1] > 64 && s[i - 1] > 64) || (s[i + 1] < 65 && s[i - 1] < 65)))
{
if(s[i + 1] - s[i - 1] == 1)
continue;
if(p3 == 1)
{
int l = s[i - 1],r = s[i + 1];
while(++l != r)
{
for(int j = 0 ; j < p2 ; j++)
{
if(p1 == 3)
cout << '*';
else if(l > 64)
{
if(p1 == 1)
printf("%c",l);
else
printf("%c",l - 32);
}
else
printf("%c",l);
}
}
}
else
{
int r = s[i - 1],l = s[i + 1];
while(--l != r)
{
for(int j = 0 ; j < p2 ; j++)
{
if(p1 == 3)
cout << '*';
else if(l > 64)
{
if(p1 == 1)
printf("%c",l);
else
printf("%c",l - 32);
}
else
printf("%c",l);
}
}
}
}
else
cout << s[i];
}
return 0;
}
|