【发布时间】:2013-11-02 17:14:48
【问题描述】:
我需要对一个字符串数组进行排序,作为输入。 请帮我指点这里。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *a, const void *b){
char* s1 = (char*)a, s2 = (char*)b;
int len1 = strlen(s1), len2 = strlen(s2);
int i=0;
for(i=0; i< len1 && i<len2; i++){
if(s1[i] > s2[i]) return 1;
if(s1[i] < s2[i]) return 0;
}
return 0;
}
int main() {
int i;
int len;
scanf("%d",&len);
char* a[len];
for(i=0; i<len; i++){
a[i] = (char*)malloc(13);
scanf("%s",a[i]);
}
qsort(&a, len, sizeof(char*), compare);
for(i=0; i<len; i++){
printf("%s\n",a[i]);
}
return 0;
}
问题仅在于比较功能。
【问题讨论】:
-
if(s1[i] < s2[i]) return 0;应该是if(s1[i] < s2[i]) return -1;。另请注意,aaa将与aaax与当前的比较方法进行比较。 -
compare()函数的大部分应该只是对strcmp()的调用。麻生太郎,don't cast the return value ofmalloc()在 C 中。 -
qsort()的比较器应该返回它<0如果左/右元素升序排序,0如果它们相等,>0如果它们降序排序。我认为你不能只返回1或0。我提到这一点是因为您的问题在相关搜索结果中的排名很高。