2016-08-01 2 views
2

stdlib qsort를 사용하여 문자열 배열을 정렬하려고합니다. 아무도 내가 누락 된 단계를 가리킬 수 있습니까?qsort를 사용하여 문자열 정렬

1.unsorted 문자열 배열 2.first 캐릭터가 잘못된 (노마 amnor로 인쇄)

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; 
} 

따라 출력의 문제이다. qsort를 호출하는 동안

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 전달된다. 개별 요소의 크기로 sizeof(char)을 전달하고 있는데 잘못되었습니다. 귀하의 경우 각 요소는 10 자의 문자열입니다. 이미 size1이 값은, 당신이 사용할 수 있습니다 캡처 한만큼,

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

또는 :

qsort(names,s2,size1,compare); 
관련 문제