Description
Sample Input #1
1 2 1
abcs-w1234-9s-4zz
Sample Input #2
2 3 2
a-d-d
Sample Input #3
3 4 2
di-jkstra2-6
Sample Output #1
abcsttuuvvw1234556677889s-4zz
Sample Output #2
aCCCBBBd-d
Sample Output #3
dijkstra2************6
思路
从字符串的第
2
2
2位到
n
−
1
n-1
n−1位找
−
-
−然后输出
本蒟蒻写得非常非常
∗
(
1
e
1000000
)
*(1e1000000)
∗(1e1000000)麻烦
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int Modality,Num,Order,n;
int Flag[125];
string s;
bool f;
char z;
void write(char x,char y,int k)
{
if((x==y) ||
((x>='a' && x<='z') && (y>='0' && y<='9')) ||
((x>='0' && x<='9') && (y>='a' && y<='z')) ||
(x>y))
{
if(!Flag[k-1])cout<<x;
cout<<'-';
f=1;
return;
}
else if(x==y-1)
{
cout<<x;
f=1;
return;
}
if(!Flag[k-1])cout<<x;
if(Order==1)
{
for(int i=x+1;i<=y-1;++i)
{
if(Modality==1)z=i;
else if(Modality==2)z=i-32;
else if(Modality==3)z='*';
for(int j=1;j<=Num;++j)
cout<<z;
}
}
else if(Order==2)
{
for(int i=y-1;i>=x+1;--i)
{
if(Modality==2 && (i>='a' && i<='z') )z=i-32;
else if(Modality==3)z='*';
else z=i;
for(int j=1;j<=Num;++j)
cout<<z;
}
}
cout<<y;
}
int main()
{
scanf("%d%d%d\n",&Modality,&Num,&Order);
getline(cin,s);
n=s.length();
s=' '+s;
for(int i=2;i<=n-1;++i)
if((s[i]=='-') &&
(((s[i-1]>='0' && s[i-1]<='9')) ||
(s[i-1]>='a' && s[i-1]<='z')))
{
// printf("\n%c\n",s[i]);
f=0;
write(s[i-1],s[i+1],i);
Flag[i-1]=Flag[i]=
Flag[i+1]=1;
if(f)Flag[i+1]=0;
i+=1;
}
else if(!Flag[i-1])
{
Flag[i-1]=1;
cout<<s[i-1];
}
if(!Flag[n-2] && s[n-1]=='-' && s[n]!='-')
{
f=0;
write(s[n-2],s[n],n);
Flag[n-2]=Flag[n-1]=Flag[n]=1;
if(f)Flag[n]=0;
}
if(!Flag[n-1])cout<<s[n-1];
if(!Flag[n])cout<<s[n];
return 0;
}