如题~一道水的ACM题目

#include
#include
#include

using namespace std;

char a[14]={'3','4','5','6','7','8','9','10','J','Q','K','A','2'};
int b[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};

int find(char x)
{
for(int i=0;i<13;i++)
if(a[i]==x) return b[i];
}

int cmp(const char i,const char j){return find(i)<find(j);}

int main()
{

int t;
while(~scanf("%d",&t))
{
    int n;
    char x[105];
    while(t--){
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%c",&x[i]);
    sort(x,x+n,cmp);
    printf("%c",x[0]);
    for(int i=1;i<n;i++)
        printf(" %c",x[i]);
    printf("\n");
}
}
return 0;

}


按照这个顺序排序输入的字符

按照这个顺序排序输入的字符、、但是这样不行~求助,在线等

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
char a[14]={'3','4','5','6','7','8','9','0','J','Q','K','A','2'};
int b[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
int find(char x)
{
for(int i=0;i<13;i++)
if(a[i]==x) return b[i];
}
int cmp(const char i,const char j){return find(i)<find(j);}
int main()
{
int t;
while(~scanf("%d",&t))
{
    int n;
    char x[105];
    while(t--){
    scanf("%d",&n);
    string str;
    cin>>str;
    int i=0;
    for(int j=0;j<str.size();++j){
        if(str[j]!='1'){
            x[i] = str[j];
        }else{
            x[i] = '0';
            ++j;
        }
        ++i;
    }
    sort(x,x+n,cmp);
    printf("%c",x[0]);
    for(int i=1;i<n;i++)
    if(x[i]!='0'){
        printf(" %c",x[i]);
    }else{
        printf(" 10");
    }
    printf("\n");
}
}
return 0;
}

你有两个问题,第一个,char接受输入会吃掉回车,所以你少了一个字母,第二个,char只能保存一个字符,保存不了10,我使用0代替了10