2016-08-01 100 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);