c语言,一个简单的题,同样使用栈结构,别人的对了,我的错了,真的是不明白


描述
键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。
当然,上述文字和本题毫无关系!
由于某些同学的暴力操作,我们得到一个存在故障的键盘,键盘上某些字母按键按下一次会输出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;
}



提交后系统只给了错误两个字,并没有说哪里错误了,可能是某些地方导致系统的编辑器崩溃了
希望有人可以为我指点迷津

代码是正确的,可以运行,应该是你的编译器的问题,可以说一下你用的哪个编译器。