求解:对一组字符数组按照自定义的字母顺序排序应该如何做

求解:对一组字符数组按照自定义的字母顺序排序应该怎么做
比如:字母优先级是  d, f, e, c, a .  然后字符数组是str={"deec","dac","ceef","fee"};输出的是"deec","dac","fee","ceef"

------解决方案--------------------

>>> priority = {'d':0, 'f':1, 'e':2, 'c':3, 'a':4 }
>>> def keyfunc(str):
return priority[str[0]]

>>> slist = {'deec', 'dac', 'ceef', 'fee'}
>>> result = sorted(slist, key = keyfunc)
>>> result
['dac', 'deec', 'fee', 'ceef']

python写了一个。
priority为字符串到int的映射表,keyfunc返回sorted函数用于比较的主键。
sorted对字符串slist的所有键排序,结果在result中。
------解决方案--------------------
先写个最基础的函数,参数是两个字母,返回bool,通过这个函数确定字母的优先级,然后需要实现字符串排序函数
------解决方案--------------------
做个表吧 
char alphaorder[26]= {......};//自定义顺序


------解决方案--------------------
给每个字母重新定义权值,类似于:
int right[26] = { xx, xx, xx, ... , xx };

对于楼主举的这个例子:d, f, e, c, a 
可以这样做: 
int right[26] = {1, 0, 2, 5, 3, 4, 0, 0, ...., 0};

一个新的字符串比较的函数:

int mystrcmp( const char *str1, const char *str2)
{
    while (*str1 && *str2 && *str1++ == *str2++) ;
    if ('\0' == *str1 && '\0' == *str2)  return 0;
    if ('\0' == *str1 )   return -*str2;
    if ('\0' == *str2 )   return *str1;
    return right[*str1 - 'a'] - right[*str2 - 'a'];
}

我这个写的只是举个例子,希望能起到抛砖引玉的效果
------解决方案--------------------
//字母优先级是  d, f, e, c, a .  然后字符数组是str={"deec","dac","ceef","fee"};输出的是"deec","dac","fee","ceef"
#include <stdio.h>
#include <string.h>
int od(char c) {
    char *p;
    char order[6]="dfeca";

    if (0==c) return -1;
    p=strchr(order,c);
    if (NULL==p) return -1;
    return p-order;
}
int cmp(char *s1,char *s2) {
    int od1,od2;

    while (1) {
        od1=od(*s1);
        od2=od(*s2);
        if (od1<od2) return -1;
        if (od1>od2) return  1;
        if (-1==od1 && -1==od2) return 0;
        s1++;
        s2++;
    }
}
int main() {
    char *str[4]={"deec","dac","ceef","fee"};
    char *t;
    int i,j;
    for (i=0;i<4-1;i++) {
        for (j=i+1;j<4;j++) {
            if (1==cmp(str[i],str[j])) {
                t=str[i];str[i]=str[j];str[j]=t;
            }
        }
    }

    for (i=0;i<4-1;i++) printf("\"%s\",",str[i]);
    printf("\"%s\"",str[i]);
    return 0;
}
//"deec","dac","fee","ceef"