2013-10-03 2 views
1

Я пытаюсь сортировать суффиксы строки с помощью qsort(), но не получая отсортированный список.сортировка суффиксов по qsort

Что мне делать?
Вот что я сделал:

char str[MAXN]="banana", *a[MAXN]; 

for(i=0;i<strlen(str);i++) 
    a[i]=&str[i]; //a[] points to suffixes starting 

qsort(a, n, sizeof(char *), compare); 

это моя функция сравнения():

int compare(const void* p, const void* q) 
{ 
    char *a= (char*)p; 
    char *b= (char*)q; 

    return strcmp(a,b); 
} 

a[i] points to i'th suffix of str = "banana" 
a[0]: banana  
a[1]: anana  
a[2]: nana  
a[3]: ana 
a[4]: na 
a[5]: a 

after qsort() i want to get : 

a[0]: a 
a[1]: ana 
a[2]: anana 
a[3]: banana 
a[4]: na 
a[5]: nana 

проблема заключается в том, что я получаю несортированный список.

+0

Где 'n'? Это 'size_t n = strlen (str);'? – user694733

ответ

3

Функция compare получает указатели на элементы в массиве. Так как массив элементы здесь являются указателями на char, что он принимает это указатели на указатели на char:

int compare(const void* p, const void* q) 
{ 
    char **a= (char**)p; 
    char **b= (char**)q; 

    return strcmp(*a,*b); 
} 
+0

Да, он работает. спасибо. –

+0

Вы проходите слово "n = 0'. Это означает, что 0 элементов сортируются. – Joni

+0

да, я проверил свою прогу. снова и исправил его. –