计算单词出现的频率C语言实现的

来源:互联网 发布:大数据架构师招聘 编辑:程序博客网 时间:2024/04/28 01:14

这个就不多说,纯干货:

先看看这个文件的结构吧

具体的代码如下:

add_word.c 加入单词

#include <stdio.h>#include <stdlib.h>#include <string.h>#include "word_manage_p.h"static void shift_array(int index){        int src;        for (src = num_of_word -1;src >= index; src--)        {                word_array[src+1] = word_array[src];        }        num_of_word++;}static char *my_strdup(char *src){        char *dest;        dest = malloc(sizeof(char) * (strlen(src)+1));        strcpy(dest,src);        return dest;}void add_word(char *word){        int i;        int result;        for(i =0; i< num_of_word; i++)        {                result = strcmp(word_array[i].name,word);                if(result >= 0)                break;        }        if(num_of_word != 0 && result ==0 )        {                word_array[i].count++;        }        else        {                shift_array(i);                word_array[i].name = my_strdup(word);                word_array[i].count = 1;        }}
dump_word.c 输出结果

include <stdio.h>#include "word_manage_p.h"void dump_word(FILE *fp){        int i;        for (i = 0; i < num_of_word; i++)        {                fprintf(fp,"%-20s%d\n",word_array[i],word_array[i].count);        }}
 finalize.c
#include <stdlib.h>#include "word_manage_p.h"Word word_array[WORD_NUM_MAX];int num_of_word;void word_initialize(void){        num_of_word = 0;}
initialize.c

#include <stdlib.h>#include "word_manage_p.h"void word_finalize(void){        int i;        for(i = 0; i < num_of_word;i++)        {                free(word_array[i].name);        }        num_of_word = 0;}
main.c

#include <stdio.h>#include <stdlib.h>#include "get_word.h"#include "word_manage.h"#define WORD_LEN_MAX (1024)int main(int argc, char **argv){        char buf[WORD_LEN_MAX];        FILE *fp;        if(argc == 1)        {                fp = stdin;        }        else        {                fp = fopen(argv[1],"r");                if( fp == NULL)                {                        fprintf(stderr," %s %s can not open.\n",argv[0],argv[1]);                        exit(1);                }        }        word_initialize();        while(get_word(buf,WORD_LEN_MAX,fp)!= EOF)        {                add_word(buf);        }        dump_word(stdout);        word_finalize();        return 0;}
头文件如下:

word_manage.h

#ifndef WORD_MANAGE_H_INCLUDED#define WORD_MANAGE_H_INCLUDED#include <stdio.h>void word_initialize(void);void add_word(char *word);void dump_word(FILE *fp);void word_finalize(void);#endif
word_manage_p.h
ifndef WORD_MANAGE_P_H_INCLUDED#define  WORD_MANAGE_P_H_INCLUDED#include "word_manage.h"typedef struct {        char *name;        int count;}Word;#define WORD_NUM_MAX (10000)extern Word word_array[];extern int num_of_word;#endif
get_word.h

#ifndef GET_WORD_H_INCLUDE#define GET_WORD_H_INCLUDEint get_word(char *buf, int size, FILE *stream);#endif


编译上面文件:

gcc *.c -o count 

可以生成

count可执行文件

下面用一个文件进行测试

test的内容如下:

Then the programmers add the pragmas in source code to direct the compiler explicitly. The action of compiler can be controlled by programmers to generate ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

运行程序如下






0 0
原创粉丝点击