think: 1、一定要注意細節,一失足成千古恨 2、學會靈活變通
sdut原題鏈接
字符串擴展 Time Limit: 1000MS Memory Limit: 65536KB
PRoblem Description 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 3 ADEa-g-m02 acm-0-5-a-ac-cm-m-A-AC-CM-M Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z
Example Output ADEabcdefghijklm02 acm-012345-aaccmm-AACCMM Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z
Hint
Author 山東理工大學第三屆ACM程序設計競賽
以下為accepted代碼
#include <stdio.h>#include <string.h>#define MAXN 1400int main(){ char s[MAXN], ch; int T, i, len; scanf("%d", &T); getchar(); while(T--) { scanf("%s", s); ///gets(s);///3676 移除了輸入數據中的 '/r',修復了某些寫法下 gets() 會 WA 的問題。by bLue len = strlen(s); for(i = 0; i < len; i++) { if(s[i] != '-') printf("%c", s[i]); else { if((s[i-1]>='a'&&s[i-1]<='z') && (s[i+1]>='a'&&s[i+1]<='z') && (s[i-1]<=s[i+1])) { ch = s[i-1] + 1; while(ch < s[i+1]) { printf("%c", ch); ch++; } } else if((s[i-1]>='A'&&s[i-1]<='Z') && (s[i+1]>='A'&&s[i+1]<='Z') && (s[i-1]<=s[i+1])) { ch = s[i-1] + 1; while(ch < s[i+1]) { printf("%c", ch); ch++; } } ///else if((s[i-1]>='0'&&s[i-1]<='9') && (s[i+1]<='0'&&s[i+1]<='9') && (s[i-1]<=s[i+1])) else if((s[i-1]>='0'&&s[i-1]<='9') && (s[i+1]>='0'&&s[i+1]<='9') && (s[i-1]<=s[i+1])) { ch = s[i-1] + 1; while(ch < s[i+1]) { printf("%c", ch); ch++; } } else printf("-"); } } printf("/n"); } return 0;}/***************************************************User name: jk160630Result: AcceptedTake time: 0msTake Memory: 104KBSubmit time: 2017-02-04 21:42:00****************************************************/以下為wrong answer代碼 (一直未找出錯誤在哪里,希望有小伙伴可以指點留言)
#include <stdio.h>#include <string.h>#define MAXN 1400int main(){ char s[MAXN]; int T, i, len; scanf("%d", &T); getchar(); while(T--) { scanf("%s", s); len = strlen(s); if(len > 1) { for(i = 0; i < len-2; i++) { if(s[i] == s[i+2] && s[i+1] == '-') { printf("%c", s[i]); i += 1; } else if((s[i]>='a'&&s[i]<='z') && s[i+1] == '-' && (s[i+2]>=s[i]&&s[i+2]<='z')) { for(; s[i] < s[i+2]; s[i]++) printf("%c", s[i]); i += 1; } else if((s[i]>='A'&&s[i]<='Z') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='Z')) { for(; s[i] < s[i+2]; s[i]++) printf("%c", s[i]); i += 1; } else if((s[i]>='0'&&s[i]<='9') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='9')) { for(; s[i]<s[i+2]; s[i]++) printf("%c", s[i]); i += 1; } else printf("%c", s[i]); } i = len-3; if(s[i] == s[i+2] && s[i+1] == '-') { printf("%c", s[i+2]); } else if((s[i]>='a'&&s[i]<='z') && s[i+1] == '-' && (s[i+2]>=s[i]&&s[i+2]<='z')) { printf("%c", s[i+2]); } else if((s[i]>='A'&&s[i]<='Z') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='Z')) { printf("%c", s[i+2]); } else if((s[i]>='0'&&s[i]<='9') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='9')) { printf("%c", s[i+2]); } else { printf("%c", s[i+1]); printf("%c", s[i+2]); } printf("/n"); } else printf("%s/n", s); } return 0;}/***************************************************User name: jk160630Result: Wrong AnswerTake time: 4msTake Memory: 104KBSubmit time: 2017-02-04 21:46:02****************************************************/新聞熱點
疑難解答