字符串扩展
这道题我“第一次抱着试试看的态度”就叫上去了,结果直接AC。贴着道题主要是给了我一些经验,首先看到一道题想到的就是这道题有没有陷阱,比如内存过大,或者数据溢出等等,或者很恶心的最前面和最后面会不会是特殊情况(这道题就是),还有是否当输入0.1.2的时候按着自己的思路来的话会是和答案不一样的结果?
字符串扩展
Time Limit: 1000MS Memory limit: 65536K
题目描述
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
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 {
5 char s[1001];
6 int i,j,p,t,n;scanf("%d%*c",&n);
7 while(n--)
8 {
9 gets(s);
10
11 for(i=0;s[i] != '\0'; i++)
12 {
13
14 if(i == 0||s[i+1] == '\0')
15 {
16 printf("%c",s[i]);
17 }
18 else
19 {
20 t = i-1;p = i+1;
21 if(s[i] == '-')
22 {
23 if(s[t] >= '0' && s[t]<='9' && s[p] >= '0' && s[p]<='9')
24 {
25 if(s[t] < s[p])
26 {
27 while(s[t]<s[p]-1)
28 {
29 s[t]++;
30 printf("%c",s[t]);
31 }
32
33 }
34 else if(s[t] > s[p])
35 printf("%c",s[i]);
36 }
37 else if(s[t] >= 'a' && s[t]<'=z' && s[p] >= 'a' && s[p]<='z')
38 {
39 if(s[t] < s[p])
40 {
41 while(s[t]<s[p]-1)
42 {
43 s[t]++;
44 printf("%c",s[t]);
45 }
46
47 }
48 else if(s[t] > s[p])
49 printf("%c",s[i]);
50
51 }
52 else if(s[t] >= 'A' && s[t]<='Z' && s[p] >= 'A' && s[p]<='Z')
53 {
54 if(s[t] < s[p])
55 {
56 while(s[t]<s[p]-1)
57 {
58 s[t]++;
59 printf("%c",s[t]);
60 }
61
62 }
63 else if(s[t] > s[p])
64 printf("%c",s[i]);
65 }
66 else printf("%c",s[i]);
67
68 }
69 else
70 printf("%c",s[i]);
71
72 }
73 }
74 printf("\n");
75 }
76 }