题解
模拟+字符串
展开的过程很容易实现,关键的坑是‘-’位置和判断是否展开
输入可能出现-424-,j--e,p-8-l-6的情况
具体情况看代码
#include<cstdio> #include<cstring> using namespace std; char a[110],z,y; int main() { int l,i,j,k,p1,p2,p3; scanf("%d%d%d ",&p1,&p2,&p3); scanf("%s",a+1); l=strlen(a+1); for(i=1;i<=l;i++) { if(a[i]=='-') { z=a[i-1];y=a[i+1]; if(i==1){printf("-");continue;}//如果第一个字符是-,跳过 else if(i==l){printf("-");continue;}//如果最后一个字符是-,跳过 else if(z=='-'||y=='-'){printf("-");continue;}//出现连续两个-,跳过 else if((z>='0'&&z<='9'&&y>='a'&&y<='z')||(y>='0'&&y<='9'&&z>='a'&&z<='z')){printf("-");continue;}//-左右不同时是字母或数字,不展开 else if(y-z==1)continue;//-左右连续,省略- else if(y<=z){printf("-");continue;} else { if(p1==3)//'*'填充 { for(j=z+1;j<y;j++) for(k=1;k<=p2;k++) printf("*"); } else if(z>='0'&&z<='9')//数字填充 { if(p3==1)//正序 for(j=z+1;j<y;j++) for(k=1;k<=p2;k++) printf("%c",j); else//倒序 for(j=y-1;j>z;j--) for(k=1;k<=p2;k++) printf("%c",j); } else//字母填充 { if(p1==1)//小写字母 { if(p3==1)//正序 for(j=z+1;j<y;j++) for(k=1;k<=p2;k++) printf("%c",j); else//倒序 for(j=y-1;j>z;j--) for(k=1;k<=p2;k++) printf("%c",j); } else//大写字母 { z-=32;y-=32;//转大写字母 if(p3==1)//正序 for(j=z+1;j<y;j++) for(k=1;k<=p2;k++) printf("%c",j); else//倒序 for(j=y-1;j>z;j--) for(k=1;k<=p2;k++) printf("%c",j); } } } } else printf("%c",a[i]); } return 0; }