2014-01-15 2 views
0
#include <stdio.h> 

typedef struct 
{ int occurrence 
    char charArray[101]; 
}Wordy; 


int comparing(const void *a, const void *b) 
{ 
    //.... 
} 

int main(void) 
{ 
     int i=0; 
    Wordy array[99999]; 

    //..... 



    return 0; 

} 

*/ 

이 프로그램은 파일에서 단어를 읽은 다음 단어의 발생을 계산합니다. 모든 것은 작동하지만 qsort 함수가 비교 함수에서 올바르게 작동한다고 생각하지 않습니다. 그것의 발생 측면에서 array을 정렬한다고 가정합니다. (그 발생을 찾는 것이 올바른 것입니다.)qsort를 사용하여 구조체 배열 정렬

내 샘플 텍스트 파일 :

zero one 
two zero 
three three 

출력 :

Before: zero one two three 

After: one two three 

(정렬 후 제로가없는 것을 알)

+2

당신은'array [1] .word'와'array [0] .word'를 참조하지만'Wordy'는'word'라는 멤버가 없습니다. 이것은 컴파일합니까? – Kninnug

답변

2

이 :

qsort(array, i, sizeof(int), comparing); 

은 wro입니다. 예 : arrayint의 배열이 아니며 Wordy의 배열입니다. 잘못된 요소 크기를 qsort()으로 지정하면 Wordy 구조체 배열의 int 크기의 "조각"에 대한 포인터를 얻으므로 결과가 다소 임의적입니다.

보십시오 : 당신의 printf 문이 다르기 때문에이

qsort(array, i, sizeof array[0], comparing); 
0

인가? wordcharArray은 다르게 정렬됩니다.

전 :

어레이 [0] .charArray 배열 [1] .word, 배열 [2] .charArray 배열 [3] .charArray);

후 :

어레이 [0] .word 배열 [1] .charArray, 배열 [2] .charArray 배열 [3] .charArray);