#include
#define VALIDATE_IS_STRING(f) do{ \
while ((c = getc(f)) != EOF) { \
if (validate_character_is_space(c)) { \
if (word) { \
wcount++; \
} \
word = 0; \
} else if((c >= 65 && c <= 90) || (c >= 97 && c <= 122)) { \
word = 1; \
} \
} \
}while(0)
#define PRINTI(x) printf("The words number is: %d\n", x)
static FILE * open_file_by_filename(char *filename) {
FILE *fp= NULL;
if ((fp = fopen(filename, "r")) == NULL) {
printf("Can not open file, please check your filename!\n");
return (NULL);
}
return (fp);
}
static unsigned int validate_character_is_space(int ch) {
return (unsigned int)(ch - 9) < 5u || ch == ' ';
}
static int get_string_number_in_file(FILE *filename) {
int i = 0, iterate = 1;
register int c;
register int word = 0;
long int wcount = 0;
VALIDATE_IS_STRING(filename);
return (wcount);
}
int main(int argc, char **argv) {
FILE *fd;
int count;
if (argc < 2|| argc >=3) {
printf("Invalid argument,please set right argument !\n");
return (-1);
}
if ((fd = open_file_by_filename(argv[1])) == NULL)
return (-1);
count = get_string_number_in_file(fd);
PRINTI(count);
fclose(fd);
return (0);
}
做过一个简单的测试,在对10M大小的文本进行单词数统计时,用时不到0.1秒。。。
阅读(734) | 评论(0) | 转发(0) |