一般我们在对字符串排序时,都会按照字典序排序。当字符串只包含小写字母时,相当于按字母表"abcdefghijklmnopqrstuvwxyz"的顺序排序。
现在我们打乱字母表的顺序,得到一个26个字母的新顺序。例如"bdceafghijklmnopqrstuvwxyz"代表'b'排在'd'前,'d'在'c'前,'c'在'e'前……
给定N个字符串,请你按照新的字母顺序对它们排序。
第一行包含一个整数N。(1 <= N <= 1000)
第二行包含26个字母,代表新的顺序。
以下N行每行一个字符串S。 (|S| <= 100)
按新的顺序输出N个字符串,每个字符串一行。
5 bdceafghijklmnopqrstuvwxyz abcde adc cda cad ddc
ddc cda cad abcde adc
//按给定的字符顺序排列 //#include<stdio.h> //#include<string.h> //#include<algorithm> //using namespace std; //char s[28],a[1002][105]; //int w[1002],len; //bool d[1002]; //struct no //{ // int d; // int d1[105]; //}av[1002]; //bool cmp(no x, no y) //{ // for (int i =0;i<len;i++) // { // if(x.d1[i]!=y.d1[i]) // { // return x.d1[i]<y.d1[i]; // } // } //} //int main() //{ // int n; // scanf("%d",&n); // scanf("%s",s); // int m=0; // memset(av,28,sizeof(av)); // for(int i=0;i<n;i++) // { // scanf("%s",a[i]); // len=strlen(a[i]); // if(m<len) // m=len; // for(int j=0;j<len;j++) // { // for(int k=0;k<26;k++) // { // if(a[i][j]==s[k]) // { // av[i].d =i;//用来存储是第几个字符串的 // av[i].d1[j] = k;/*将字符串内的每个字符转化为其在s字符串内的下标数值*/ // break; // } // } // } // } // sort(av,av+n,cmp); // for(int i=0;i<n;i++) // { // printf("%s\n",a[av[i].d]); // } //}