SDUTOJ-1916字串擴充套件
字串擴充套件 (WA了13邊)
https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2710/pid/1916
Time Limit: 1000 ms Memory Limit: 65536 KiB
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
每組測試資料輸出一行擴充套件後的字串。
Sample Input
3 ADEa-g-m02 acm-0-5-a-ac-cm-m-A-AC-CM-M Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z
Sample Output
ADEabcdefghijklm02 acm-012345-aaccmm-AACCMM Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z
Hint
Source
山東理工大學第三屆ACM程式設計競賽
注意:
------c-z- 這些特殊情況的輸出 這題 l a 的很 意義不大
#include <bits/stdc++.h> using namespace std; int judge(char c) { if (c >= 'a' && c <= 'z') return 1; else if (c >= 'A' && c <= 'Z') return 2; else if (c >= '0' && c <= '9') return 3; else return 0; // 注意-----c-k這種情況的輸出 巨坑 } int main() { int n; cin >> n; char s[1111]; while (n--) { cin >> s; int len = strlen(s); for (int i = 0; i < len; i++) { if (s[i] != '-') putchar(s[i]); else if (s[i] == '-' && judge(s[i - 1]) && judge(s[i + 1]) && judge(s[i - 1]) == judge(s[i + 1]) && s[i - 1] <= s[i + 1]) { for (char j = s[i - 1] + 1; j < s[i + 1]; j++) putchar(j); } else cout << "-"; } cout << endl; } return 0; }