字符串展开
思路
这道题就是直接模拟,就可以了。
只是有一些细节要注意。
代码
#include<cstdio>
#include<cstring>
using namespace std;
int p1,p2,p3,l;
char a[101];
int main()
{
scanf("%d%d%d",&p1,&p2,&p3);//读入
getchar();//处理换行符
gets(a);//读入
l=strlen(a);//求出字符串长度
for (int i=0;i<=l-1;i++)//模拟
{
if ((i==0&&a[i]=='-')||(a[i]=='-'&&a[i-1]=='-')) printf("-");
else if (a[i]=='-')
{
if (a[i+1]<=a[i-1]||(a[i+1]>='0'&&a[i+1]<='9'&&a[i-1]>='a'&&a[i-1]<='z')||(a[i+1]>='a'&&a[i+1]<='z'&&a[i-1]>='0'&&a[i-1]<='9')) printf("-");
else if (p1==3) for (int j=a[i-1]+1;j<=a[i+1]-1;j++) for (int k=1;k<=p2;k++) printf("*");
else if (p3==1&&p1==1) for (char j=a[i-1]+1;j<=a[i+1]-1;j++) for (int k=1;k<=p2;k++) printf("%c",j);
else if (p3==1&&p1==2)
{
if (a[i-1]<='z'&&a[i-1]>='a') for (char j=a[i-1]+1;j<=a[i+1]-1;j++) for (int k=1;k<=p2;k++) printf("%c",j-32);
else for (char j=a[i-1]+1;j<=a[i+1]-1;j++) for (int k=1;k<=p2;k++) printf("%c",j);
}
else if (p3==2&&p1==1) for (char j=a[i+1]-1;j>=a[i-1]+1;j--) for (int k=1;k<=p2;k++) printf("%c",j);
else if (p3==2&&p1==2)
{
if (a[i-1]<='z'&&a[i-1]>='a') for (char j=a[i+1]-1;j>=a[i-1]+1;j--) for (int k=1;k<=p2;k++) printf("%c",j-32);
else for (char j=a[i+1]-1;j>=a[i-1]+1;j--) for (int k=1;k<=p2;k++) printf("%c",j);
}
}
else printf("%c",a[i]);
}
return 0;
}