C언어

데이터 섞기 - shuffle

고요한하늘... 2007. 10. 25. 13:45

===================================

main.c

===================================

#include
#include
#include
#include
#include
#include "keyword.c"

int     ncomp = 0;
#define MAXCOMPARE  5

int mystrcmp(const void *a, const void *b)
{
    ncomp++;
    return strcmp(* (char **) a, * (char **) b);
}

void shuffle(char **keyword, int size)
{
    int     i;
    int     k1;
    int     k2;
    char    *x;

    for(i = 1; i < size*10; i++)
    {
        k1 = rand() % size;
        k2 = rand() % size;
        x = keyword[k1];
        keyword[k1] = keyword[k2];
        keyword[k2] = x;
    }
}

int main()
{
    char **keyword;
    int     i;
    int     count;

    keyword = keyword2;
    count = sizeof(keyword2)/sizeof(4);
    shuffle(keyword, count);

    for(i = 0; i < count; i++)
    {
        printf("%s\n", keyword[i]);
    }
    printf("\n");
    return 0;

}

 

===================================

keyword.c

===================================

 

char *keyword2[]={
"가학",
"가합",
"가항",
};



###############################################################################################

 파일 입력 버전

###############################################################################################

#include <string.h>

#include <stdio.h>

#include <stdlib.h>


void shuffle( char **keyword, int size )

{

    int i;

    int k1;

    int k2;

    char *x;


    for( i = 0; i < size*10; i++ )

    {

        k1 = rand()%size;

        k2 = rand()%size;


        x = keyword[k1];

        keyword[k1] = keyword[k2];

        keyword[k2] = x;

    }

}



void print_result( char *fn, char **keyword, int index )

{

    int i;

    FILE *fw;

    fw = fopen( fn, "w" );

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

        fprintf( fw, "%s\n", keyword[i]);

    fclose(fw);

}



int get_line( FILE *fp )

{

    int ret;

    int line=0;

    while( (ret =fgetc( fp )) != EOF )

    {

        if( ret == '\n' ) line++;

    }

    return line;

}


int main( int argc, char *argv[])

{

    FILE *fp;

    int i, line , index = 0;

    char **keyword, *p;

    char buffer[1024];


    if( argc != 3 )

    {

        printf("%s <in filename> <out filename>\n", argv[0] );

        return 0;

    }


    if(( fp = fopen( argv[1], "r")) == NULL )

    {

        fprintf( stderr,"cannot open file = %s\n", argv[1]);

    }
    line =  get_line( fp );
    fseek( fp, 0, SEEK_SET );

    keyword = malloc(sizeof(char*)*line );

    while( fgets( buffer, 1024, fp ) != NULL )
    {
        if(( p = strchr( buffer, '\n' )) != NULL ) *p = '\0';
        keyword[index++] = strdup( buffer );
    }
    shuffle( keyword, index );
    print_result( argv[2], keyword, index );

    for( i = 0; i < index; i++ )
        free( keyword[i] );
    free(keyword);
    fclose(fp);
    return 0;

}

'C언어' 카테고리의 다른 글

const  (0) 2007.12.13
Aho-Corasick 구현  (0) 2007.10.27
[C언어의 진화] ② C99의 신기술들  (0) 2007.10.20
fnctl  (0) 2007.05.15
변수 초기화(memset)  (0) 2007.03.19