字符串扩展
题目描述
Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符'-'简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符'-'来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要被解决了。给你一个含有扩展符'-'的字符串,你的任务就是将他还原成原来的字符串。要求是只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字时并且扩展符前面的字符不大于后面的字符才进行扩展,其它情况不进行扩展,原样输出。例如:a-R、D-e、0-b、4-B等字符串都不进行扩展。
输入
第一行是一个正整数T,表示共有T组测试数据(T < 100)。下面的T行,每一行包括一个长度不大于1000的待扩展字符串.
输出
每组测试数据输出一行扩展后的字符串。
示例输入
3 ADEa-g-m02 acm-0-5-a-ac-cm-m-A-AC-CM-M Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z
示例输出
ADEabcdefghijklm02 acm-012345-aaccmm-AACCMM Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z
这个题提交错误12边,太粗心
#include<stdio.h>
#include<string.h>
int main()
{
char a[1005],b[100000];
int q,w,e,r,t=0,y,p;
scanf("%d%*c",&q);
for(w=0;w<q;w++)
{
t=0;
gets(a);
r=strlen(a);
for(e=0;e<r;e++)
{
if(a[e]!='-')
{
b[t]=a[e];
t++;
}
else
{
if((a[e-1]>=65 && a[e+1]<=91 && a[e+1]>a[e-1]) || (a[e-1]>=97 && a[e+1]<=123 && a[e+1]>a[e-1]) || (a[e-1]>=48 && a[e+1]<=57 && a[e+1]>a[e-1]))
{
a[e-1]+=1;
while(a[e-1]<a[e+1])
{
b[t]=a[e-1];
t++;
a[e-1]++;
}
}
else if(a[e-1]==a[e+1] && a[e-1]!='-')错误原因忽略a[e-1]和a[e+1]同为符号
p=1;
else
{
b[t]='-';
t++;
}
}
}
for(y=0;y<t;y++)
printf("%c",b[y]);
printf("\n");
}
return 0;
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
正确的如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[1005],b[100000];
int q,w,e,r,t=0,y,p;
scanf("%d%*c",&q);
for(w=0;w<q;w++)
{
t=0;
gets(a);
r=strlen(a);
for(e=0;e<r;e++)
{
if(a[e]=='-')
{
if((a[e-1]>=65 && a[e+1]<=90 && a[e+1]>=a[e-1]) || (a[e-1]>=97 && a[e+1]<=122 && a[e+1]>=a[e-1]) || (a[e-1]>=48 && a[e+1]<=57 && a[e+1]>=a[e-1]))
{
a[e-1]+=1;
while(a[e-1]<a[e+1])
{
b[t]=a[e-1];
t++;
a[e-1]++;
}
}
else
{
b[t]=a[e];
t++;
}
}
else
{
b[t]=a[e];
t++;
}
}
for(y=0;y<t;y++)
printf("%c",b[y]);
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号