题
描述
键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。
当然,上述文字和本题毫无关系!
由于某些同学的暴力操作,我们得到一个存在故障的键盘,键盘上某些字母按键按下一次会输出2个字母。
例如键盘的b,d按键是故障的,当我们按下abcd时,屏幕上会显示abbcdd。
现在我们得到一个完全由小写字母组成的字符串,请按字典序输出那些确定没有故障的字母按键。
输入格式
第一行是一个整数t(0<=t<=1000),表示有t组字符串需要判定,字符串长度小于1000。
输出格式
输出t行,每一行字典序输出正确的字母序列,如果没有确认正确的字母按键,输出空行。
输入样例
4
a
zzaaz
ccff
cbddbb
输出样例
a
z
bc
我的代码
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int t,top=0;
char a,b[26]={'\0'},temp;
scanf("%d\n",&t);
while(t>0)
{
a=getchar();
if(a=='\n')
{
if(top==0) printf(" \n");
else if(top>=2)
{
for(int i=0;i<top-1;i++)
{
for(int j=0;j<top-1-i;j++)
{
if(b[j]>b[j+1])
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
printf("%s",b);
}
else
printf("%s\n",b);
t--;
top=0;
continue;
}
if(top==0)
b[top++]=a;
else if(b[top-1]==a)
{
b[top-1]='\0';
top--;
}
else b[top++]=a;
}
return 0;
}
别人的代码
#include <iostream>
#include <cstring>
using namespace std;
char a[10005];
char s[10005];
int top;
int main()
{
int t,i,j,k,n;
char x;
cin>>t;
while(t--)
{
scanf("%s",a+1);
n=strlen(a+1);
top=0;
for(i=1;i<=n;i++)
{
if(top==0||s[top-1]!=a[i])
s[top++]=a[i];
else if(s[top-1]==a[i])
top--;
}
if(top==0) cout<<' ';
else
{
for(j=0;j<top-1;j++)
for(k=0;k<top-1-j;k++)
{
if(s[k]<s[k+1])
{
x=s[k+1];
s[k+1]=s[k];
s[k]=x;
}
}
while(top)
cout<<s[--top];
}
cout<<endl;
}
return 0;
}
提交后系统只给了错误两个字,并没有说哪里错误了,可能是某些地方导致系统的编辑器崩溃了
希望有人可以为我指点迷津
代码是正确的,可以运行,应该是你的编译器的问题,可以说一下你用的哪个编译器。