简单的模拟,注意不要漏条件。在处理“x-x”类型的时候不用先输出第三位的x,以免与后面的‘-’冲突。还有一个要注意的地方是当p1=2的时候大写处理要先判断是不是字母,如果是数字就不用转换。
#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
void solve()
{
int p1,p2,p3;
cin>>p1>>p2>>p3;
string s;
cin>>s;
int l=s.length();
for(int i=0;i<l;i++)
{
if(s[i+1]!='-'||s[i]=='-')cout<<s[i];//直接输出该位
else if((s[i]<='9'&&s[i+2]>='A')||(s[i+2]<='9'&&s[i]>='A'))//字母-数字情况
{
cout<<s[i]<<s[i+1];
i++;
}
else if(s[i]>=s[i+2])//左大右小情况
{
cout<<s[i]<<s[i+1];
i++;
}
else if(s[i]==s[i+2]-1)//后继情况
{
cout<<s[i];
i++;
}
else
{
int n1=s[i],n2=s[i+2];
cout<<s[i];
if(p3==1)
{
if(p1==1)
{
for(int j=n1+1;j<=n2-1;j++)
for(int k=1;k<=p2;k++) cout<<char(j);
}
else if(p1==2)//注意判断是否为字母
{
for(int j=n1+1;j<=n2-1;j++)
for(int k=1;k<=p2;k++)
{
if(j<='9')cout<<char(j);
else cout<<char(j+'A'-'a');
}
}
else
{
for(int j=n1+1;j<=n2-1;j++)
for(int k=1;k<=p2;k++) cout<<"*";
}
}
else
{
if(p1==1)
{
for(int j=n2-1;j>=n1+1;j--)
for(int k=1;k<=p2;k++)
{
cout<<char(j);
}
}
else if(p1==2)//这里一定要判断是不是字母
{
for(int j=n2-1;j>=n1+1;j--)
for(int k=1;k<=p2;k++)
{
if(j<='9')cout<<char(j);
else cout<<char(j+'A'-'a');
}
}
else
{
for(int j=n1+1;j<=n2-1;j++)
for(int k=1;k<=p2;k++) cout<<"*";
}
}
i++;
}
}
}
int main()
{
IOS;
solve();
return 0;
}