[题解]字符串展开(expand) 输入数据:
2 3 2
a-d-d-a-9-a-a-b-b-a 输出数据:
aCCCBBBd-d-a-9-a-ab-b-a
[code=Cpp width=740px]#include <stdio.h>
#include <string.h>
int main()
{
int p1,p2,p3,i,j,k,t,len;
char a[100];
freopen("expand.in","r",stdin);
freopen("expand.out","w",stdout);
scanf("%d %d %d",&p1,&p2,&p3);
scanf("%s",a);
len=strlen(a);
for(i=0;i<=len-1;i++)
{
//首先是否判断当前这个字符 是否 '-' 号 ,如果不是'-'号,肯定是要输出,
//如果是'-',则需要分情况讨论
if(a=='-')
{
//首先判断'-'号的左右两边 是不是 同为 字母或者数字
//如果不同为字母或者数字,减号是要留下的
//如果同为为字母或者数字,继续进行分情况讨论
if(a[i-1]>='a' && a[i-1]<='z' && a[i+1]>='a' && a[i+1]<='z' || a[i-1]>='0' && a[i-1]<='9' && a[i+1]>='0' && a[i+1]<='9')
{
//如果'-'号 左右两边是否相等,相等的话,'-'号需要留下。
if(a[i-1]==a[i+1])
{
printf("-");
}
else if(a[i-1]+1==a[i+1])//如果'-'号 右边是左边的后继,'-'号不能输出。
{
;//为空语句,什么都不做
}
else
{
if(a[i-1]>a[i+1])//如果'-'号 左边>左边,直接输出 '-'号
{
printf("-");
}
else//如果'-'号 右边>左边,且不是左边的后继,在进行讨论
{
//大小写判断
t=0;
if(p1==2)
t=32;
//是否逆序
if(p3==1)//正序
{
for(j=a[i-1]+1;j<=a[i+1]-1;j++)//补充中间的
{
for(k=1;k<=p2;k++)//每个打印P2次
{
if(p1==3)//星号判断
printf("*");
else
{
//对于数字的特殊处理,注意这里很重要,因为如果是数字,即使p1=2,也不能打印大写字母,所以不能减32
if(j>='0' && j<='9')
printf("%c",j);
else
printf("%c",j-t);
}
}
}
}
else//逆序
{
for(j=a[i+1]-1 ;j>=a[i-1]+1;j--)//补充中间的
{
for(k=1;k<=p2;k++)//每个打印P2次
{
if(p1==3)//星号判断
printf("*");
else
{
//对于数字的特殊处理,注意这里很重要,因为如果是数字,即使p1=2,也不能打印大写字母,所以不能减32
if(j>='0' && j<='9')
printf("%c",j);
else
printf("%c",j-t);
}
}
}
}
}
}
}
else//如果不同为字母或者数字,减号是要留下的
{
printf("-");
}
}
else
{
printf("%c",a);
}
}
getchar();getchar();
return 0;
}
</string.h></stdio.h>[/code]
|