2016-08-01 6 views
2

Ich versuche, ein Array von Zeichenfolgen mit STDLIB QSORT zu sortieren. Kann mir jemand den Schritt zeigen, den ich vermisse?Sortieren von Zeichenfolgen mit 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; 
} 

Im Folgenden werden die Probleme in der Ausgabe:

1.unsorted strings 2.First Zeichenfolge des Arrays nicht korrekt ist (Norma als Amnor gedruckt).

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

Make up Ihre Meinung darüber, ob Sie versuchen, ein Array von 'Char *' s (wie Ihre Vergleichsfunktion definiert ist) oder ein Array von 'char [10]' s (wie das Array deklariert ist) oder ein Array von 'char zu sortieren 's (entsprechend der Größe, die du an qsort übergeben hast). – immibis

+0

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

Antwort

1

Sie passieren falsch size während qsort aufrufen. Sie übergeben sizeof(char) als die Größe Ihres individuellen Elements, was falsch ist. In Ihrem Fall ist jedes einzelne Element eine Zeichenfolge mit zehn Zeichen.

So können Sie das korrigieren, indem entweder Aufruf qsort als:

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

Oder, wie Sie bereits dieser Wert in size1 erfasst haben, können Sie diese verwenden, wie:

qsort(names,s2,size1,compare);