c·c++/c 프로그래밍

단어세기

바로이순간 2013. 8. 21. 15:17

#include <stdio.h>

#include <string.h>  

typedef struct _words {

    char body[40];

    int  cnt;

} words;

int main() {  

    FILE *f1;  

    words wordTab[100];

    words temp;   

    char word[40];  

    int i, j, n, x;  

    f1=fopen("input.txt", "r");  

    if(f1==NULL) {  

        printf("입력파일을 읽을 수 없습니다.");  

        return 1;  

    }  

    i=0;  

    fscanf(f1, "%s", wordTab[i].body); 

    wordTab[i].cnt=1;  

    i+=1;  

    while(!feof(f1)) {  

        fscanf(f1, "%*[ .\n]%[^ .\n]", word);

        if(strlen(word)>0) { 

            strcpy(wordTab[i].body, word);  

            for(j=0;j<i;++j)  

                if(strcmp(wordTab[j].body, word)==0) break;  

            if(j==i) { wordTab[i].cnt=1; i+=1; }  

            else wordTab[j].cnt+=1;

        }  

        word[0]=0;

    }  

    fclose(f1);  

    // 지금까지 파일을 읽고서    

    // 단어별로 정렬을 해 준다.  

    n=i;  

    for(i=0;i<n-1;++i) {  

        x=i;  

        for(j=i+1;j<n;++j)  

            if(_stricmp(wordTab[j].body, wordTab[x].body)<0) x=j; 

        temp=wordTab[i];

        wordTab[i]=wordTab[x];

        wordTab[x]=temp; 

    }  

    for(i=0;i<n;++i)  

        printf("%s\t%d\n", wordTab[i].body, wordTab[i].cnt);  


    return 0;  

}