2013-08-14 2 views
1

qsort을 사용하여 알파벳 문자열을 알파벳순으로 정렬하려고합니다. 지금은 내 문자열의 순서를 뒤집을 것 같습니다.qsort 문자열 순서를 뒤집을 때

printf("unsorted %s\n", string); 
qsort(string, strlen(string), sizeof(char), compare); 
printf("sorted %s\n", string); 

문자열은 "ACBD"문자열입니다. 두 번째 printf는이를 "DBCA"로 표시합니다. 내 비교 함수는, 내가 꽤 멍청한 짓을하고 있어요 확신

compare(const void *a1, const void *b1){ 
    const int *a2 = a1; 
    const int *b2 = b1; 

    if(*a2 == *b2){ 
     return 0; 
    } 
    else{ 
     if(*a2 < *b2){ 
      return -1; 
     } 
     else{ 
      return 1; 
     } 
    } 
} 

하지만 어떤 도움에 감사드립니다.

편집 : 문자열 당신은 문자 비교를 수행 할

답변

4

char string[1000]로 선언 실제로 정수 비교를하고있는 (sizeof 연산자 INT>는 sizeof 문자).

수정은 다음과 같이 :

char *a2 = a1; 
char *b2 = b1; 
+0

감사합니다! 모두 고정 – user2655377

+0

@ user2655377 참고로 비교 함수를 'int cmp (const void * a1, const void * b1) {return * (char *) a1 - * (char *) b1; }' – SheetJS

+0

'const char c1 = * (const char *) a1, c2 = * (const char *) b1;'은 포인터의 직접 참조를 직접적으로 고려해야한다. 언제나 그렇듯이, 비교는'return (c1 c2;'. – unwind