2016-08-01 76 views
2

我想使用stdlib qsort对字符串数组进行排序。任何人都可以指向我缺少的步骤。使用qsort排序字符串

int compare(const void* a, const void* b) 
{ 
    const char *ia = (const char *)a; 
    const char *ib = (const char *)b; 
    return strcmp(ia, ib); 
} 

//utility to print strings 
void print_strs(char name[][10],int len){ 

    int i=0; 
    len = 5; 
    for(i=0;i<len;i++){ 
     printf("%s \n",name[i]); 
    } 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char names[5][10] = {"norma","daniel","carla","bob","adelle"}; 
    int size1 = sizeof(names[0]); 
    int s2 = sizeof(names)/size1; 
    print_strs(names,5); 
    qsort(names,s2,sizeof(char),compare); 
    printf("\n==================\n"); 
    print_strs(names,5); 
    return 0; 
} 

以下是在输出的问题:

1.unsorted字符串 阵列的2.first串不正确(诺玛打印为AMNOR)。

norma 
daniel 
carla 
bob 
adelle 
================== 
amnor 
daniel 
carla 
bob 
adelle 
+1

弥补

所以,你可以通过调用qsort为纠正你想知道你是否试图对一个char *数组进行排序(当你的比较函数被定义时)或者一个char [10](数组被声明)或者一个char (根据你传递给qsort的大小)。 – immibis

+0

'sizeof(char)' - >'size1' – kaylum

回答

1

你传入错size同时呼吁qsort。你通过sizeof(char)作为你个人元素的大小,这是错误的。在你的情况下,每个单独的元素是一个十个字符的字符串。

qsort(names,s2,sizeof(char) * 10,compare); 

或者,因为你已经捕捉到size1这个值,你可以使用,如:

qsort(names,s2,size1,compare);