Tom有些時候為了記錄的方便,常常將一些連續的字符用擴展符’-‘簡單表示。比如abcdefg可以簡寫為a-g,即用起始的字符和終止字符中間加上一個擴展符’-‘來表示這個字符串。但是為了處理的方便,Tom又必須將這些我們簡單記法擴展成原來的字符串。很明顯要是人工來做的話必定很麻煩,Tom知道計算機可以幫助他完成這個任務,但是他卻不會編程,這的確讓他很上火。他知道今天是山東理工大學第三屆ACM校賽的日子,屆時來自全校的編程愛好者都會來參加比賽,他很興奮,因為這個困惑他良久的問題終于要被解決了。給你一個含有擴展符’-‘的字符串,你的任務就是將他還原成原來的字符串。要求是只處理[a-z]、[A-Z]、[0-9]范圍內的字符擴展,即只有當擴展符前后的字符同時是小寫字母、大寫字母或數字時并且擴展符前面的字符不大于后面的字符才進行擴展,其它情況不進行擴展,原樣輸出。例如:a-R、D-e、0-b、4-B等字符串都不進行擴展。 Input
第一行是一個正整數T,表示共有T組測試數據(T < 100)。下面的T行,每一行包括一個長度不大于1000的待擴展字符串. Output
每組測試數據輸出一行擴展后的字符串。 Example Input
3ADEa-g-m02acm-0-5-a-ac-cm-m-A-AC-CM-MWelcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-ZExample Output
ADEabcdefghijklm02acm-012345-aaccmm-AACCMMWelcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-ZHint
Author 山東理工大學第三屆ACM程序設計競賽
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <bits/stdc++.h> #define N 1010000 int i2, j2; int main() { int t; char p[1100]; scanf("%d", &t); getchar(); while(t--) { scanf("%s", p); int b=strlen(p); printf("%c", p[0]); for(int a=1; a<b;a++) { if(p[a]=='-') { if(p[a-1]>='a'&&p[a-1]<='z'&&p[a+1]>=p[a-1]&&p[a+1]<='z') { for(int k=p[a-1]+1; k<p[a+1]; k++) printf("%c", k); } else if(p[a-1]>='A'&&p[a-1]<='Z'&&p[a+1]>=p[a-1]&&p[a+1]<='Z') { for(int k=p[a-1]+1; k<p[a+1]; k++) printf("%c", k); } else if(p[a-1]>='0'&&p[a-1]<='9'&&p[a+1]>=p[a-1]&&p[a+1]<='9') { for(int k=p[a-1]+1; k<p[a+1]; k++) printf("%c", k); } else printf("%c", p[a]); } else printf("%c", p[a]); } printf("/n"); } return 0; }新聞熱點
疑難解答