@zsh-o
2018-03-25T06:50:00.000000Z
字数 1008
阅读 979
算法
全部都是小写字母,小写字母重新组成一个顺序字典,然后根据这个字典进行字符串排序
题很简单,里面要用到一个用函数交换两个指针指向的内容,函数的参数需要是指针的指针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();}
