求解:对一组字符数组按照自定义的字母顺序排序应该怎么做
比如:字母优先级是 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']
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"