第一次是用STL写的,结果TLE了,代码如下:
用到了find(); replace();两个函数;猜测由于cin流的形式输入导致超时,大佬有兴趣可以看看能否改进,初学C++和STL,没有头绪。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
bool judge (char a,char b)//判断是否符合拓展规则
{
if((a>='a'&&a<='z'&&b>='a'&&b<='z'&&a<=b)||(a>='A'&&a<='Z'&&b>='A'&&b<='Z'&&a<=b)||(a>='0'&&a<='9'&&b>='0'&&b<='9'&&a<=b))
return true;
else return false;
}
string expend(char a,char b)//根据头尾两个字符补全字符串
{
string s;
for(int i=(int)a+1;i<int(b);i++)
{
s+=char(i);
}
return s;
}
int main()
{
int t;
cin >> t;
string s;
string x="-";
while(t--)
{
int p=0;
cin >> s;
while((p=s.find_first_of(x,p))!=s.npos)//不能再找到‘-’时停止循环
{
if(judge(s[p-1],s[p+1])==1)
s.replace(p,1,expend(s[p-1],s[p+1]));//将‘-’拓展填入字符串
}
cout << s << endl;
}
return 0;
}
下面是换另外思路的AC代码,使用了字符数组:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1005];
int main(){
int t;
int len;
int i,j;
scanf("%d",&t);
getchar();
while(t--){
gets(a);
len=strlen(a);
printf("%c",a[0]);
for(i=1;i<len;i++){
if(a[i]=='-'&&a[i-1]<=a[i+1]&&((a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z')||(a[i-1]>='A'&&a[i-1]<='Z'&&a[i+1]>='A'&&a[i+1]<='Z')||(a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9'))){
for(j=a[i-1]+1;j<=a[i+1]-1;j++)
printf("%c",j);
}
else
printf("%c",a[i]);
}
printf("\n");
}
return 0;
}