字符串拓展
字符串扩展
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
#include<stdio.h> #include<string.h> int main() { int n, i, j, l, k, m; char str[1001]; scanf("%d", &n); for(i=0; i<n; i++) { scanf("%s", str); k = strlen(str); for(j=0; j<k; j++) { if(str[j] != '-') printf("%c", str[j]); else { if((str[j-1]>='a' &&str[j+1]<='z' || str[j-1]>='A' &&str[j+1]<='Z' || str[j-1]>='0' &&str[j+1]<='9' ) && (str[j-1] <= str[j+1])) { for(l =str[j-1]+1; l<str[j+1]; l++) printf("%c", l); } else printf("%c", str[j]); } } printf("\n"); } return 0; }
反思:这个题我又做了一遍,竟然WA了,我这次的代码大体和上面的差不多,不同的是,我在while循环里用gets输入字符串,但没考考虑到gets是可读空格的,当我输入第一组数据后,按空格键,这样循环次数就“被"减少了. 还有我在判断拓展条件的时候,少加了一个括号,就是这样(()||()||()&&() );正确的应该是( ( ()||()||() ) &&() )。如果少加的话,举例:第三组数据 SDUT-123 中,就会输出SDUT123,中间少加了‘ - ’。
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。