字符串扩展 (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;
}