这个就不多说,纯干货:
先看看这个文件的结构吧
具体的代码如下:
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_INCLUDE int 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
运行程序如下 :