新定义一个字典序,对一组字串按照新定义的字典序排序。
找到新定义的序与字典序之间的映射关系,对于输入的字串先映射到字典序,按照字典序排序,排序后再映射回来。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct line
{
char hang[32];
}lie[22];
int cmp(const void *a, const void *b)
{
return strcmp(((struct line *)a)->hang,((struct line *)b)->hang);
}
int main()
{
int num;
char dic[27];
char a[100],b[100];
int test=0;
while(scanf("%d",&num) && num)
{
test++;
scanf("%s",&dic);
for(int i=0; i<26; i++)
{
a[dic[i]] = 65+i;
b[65+i] = dic[i];
}
for(int i=0; i<num; i++)
{
scanf("%s",&lie[i].hang);
for(int j=0; lie[i].hang[j]!='\0'; j++)
lie[i].hang[j] = a[lie[i].hang[j]];
}
qsort(lie,num,sizeof(lie[0]),cmp);
for(int i=0; i<num; i++)
for(int j=0; lie[i].hang[j]!='\0'; j++)
lie[i].hang[j] = b[lie[i].hang[j]];
printf("year %d\n",test);
for(int i=0; i<num; i++)
printf("%s\n",lie[i].hang);
}
return 0;
}