@zsh-o
2018-03-25T14:50:00.000000Z
字数 1008
阅读 776
算法
全部都是小写字母,小写字母重新组成一个顺序字典,然后根据这个字典进行字符串排序
题很简单,里面要用到一个用函数交换两个指针指向的内容,函数的参数需要是指针的指针string **p
void exchange(string **a, string **b){
string *t = *a;
*a = *b;
*b = t;
}
/**
* in:
* 5
* bdceafghijklmnopqrstuvwxyz
* abcde
* adc
* cda
* cad
* ddc
* out:
* ddc
* cda
* cad
* abcde
* adc
* */
#include <iostream>
#include <vector>
using namespace std;
int DictTable[26];
int get_order(char c){
return DictTable[c-'a'];
}
int N;
bool stringCompare(string &sa, string &sb){
for(int i=0; i<min(sa.size(), sb.size()); i++){
int ta = get_order(sa[i]);
int tb = get_order(sb[i]);
if(ta < tb)
return true;
else if(ta > tb){
return false;
}
}
return sa.size() > sb.size();
}
vector<string *> SL;
void exchange(string **a, string **b){
string *t = *a;
*a = *b;
*b = t;
}
void S_order(vector<string *> &pSL){
for(int i=0; i<pSL.size(); i++){
for(int j=i+1; j<pSL.size(); j++){
if(stringCompare(*pSL[j], *pSL[i])){
exchange(&pSL[i], &pSL[j]);
}
}
}
}
int main(){
cin>>N;
char c;
for(int i=0; i<26; i++){
cin>>c;
DictTable[c-'a'] = i;
}
for(int i=0; i<N; i++){
string *s = new string;
cin>>*s;
SL.push_back(s);
}
S_order(SL);
for(int i=0; i<SL.size(); i++){
cout<<*SL[i]<<endl;
}
cin.get();
}