2012-12-23 80 views
0

如何使用qsort按字母順序排序具有字符串的二維數組的字符串,例如,如果我有一個4行的數組,並且每行都有一個大於等於50的字符串字符...我如何使用qsort函數按字母順序排序字符串?使用qsort按字母順序排序二維數組的字符串

我用這個

  qsort(arr, i, 500*sizeof(arr[0]), compare); 
      for (j=0; j<i; j++) { 
        printf("%s\n",arr[j]); 
      } 

,我用的比較是

  int compare (const void * a, const void * b) { 
        return strcmp(a, b); 
      } 

,但它給了我分段錯誤,而試圖編譯

+1

你能顯示你的arr的定義嗎? –

+2

你確定'試圖編譯時會給你一個分段錯誤嗎?這聽起來像一個編譯器錯誤,這不太可能。你可能在運行時遇到它,而不是編譯時間 – amit

+2

它應該不是'返回strcmp(*(char **)a,*(char **)b);'? – 2012-12-23 19:40:39

回答

2

這樣,它會工作。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define size 10 
int compare (const void * a, const void * b) { 
    return strcmp(*(char **)a, *(char **)b); 
} 
int main() { 
    char *arr[size]; 
    char buf[1000]; 
    for (int i=0;i<size;i++) { 
     arr[i]=strdup (gets (buf)); // using gets is risky because it can write past buf 
    } 
    qsort (arr, size, sizeof (char*), compare); 
    for (int i=0;i<size;i++) { 
     printf ("%s\n", arr[i]); 
     free (arr[i]); 
    } 
} 
+0

的定義,但是,二維數組的想法已經丟失。但是也沒有明確定義。 – pbhd

相關問題