字符串排序
HihoCoder - 1712一般我们在对字符串排序时,都会按照字典序排序。当字符串只包含小写字母时,相当于按字母表"abcdefghijklmnopqrstuvwxyz"的顺序排序。
现在我们打乱字母表的顺序,得到一个26个字母的新顺序。例如"bdceafghijklmnopqrstuvwxyz"代表'b'排在'd'前,'d'在'c'前,'c'在'e'前……
给定N个字符串,请你按照新的字母顺序对它们排序。
Input第一行包含一个整数N。(1 <= N <= 1000)
第二行包含26个字母,代表新的顺序。
以下N行每行一个字符串S。 (|S| <= 100)
Output按新的顺序输出N个字符串,每个字符串一行。
5 bdceafghijklmnopqrstuvwxyz abcde adc cda cad ddcSample Output
ddc cda cad abcde adc
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
map<char,int>mapp;
char x[30];
struct node
{
string a,b;
}s[1005];
bool cmp(node x,node y)
{
return x.b<y.b;
}
int main()
{
int n;
cin>>n;
cin>>x;
for(int i=0;i<26;i++) //对新的字母表字母标序
mapp[x[i]]=i;
for(int i=0;i<n;i++)
{
cin>>s[i].a;
s[i].b=s[i].a;
for(int j=0;s[i].b[j]!='\0';j++) //把字符串转化成正常的字母表顺序
s[i].b[j]=mapp[s[i].b[j]]+'a';
}
sort(s,s+n,cmp); //对字符串排序
for(int i=0;i<n;i++)
cout<<s[i].a<<endl;
return 0;
}