完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
题目35:统计网页词频 假如有5个文件5个网页,每个文件中都保存了一篇一定长度的英文文章,现在输入一个关键字,统计出这个关键字在每一个文件中的词频,并按照词频的大小,按照从大到小的顺序将这些文件输出到屏幕和结果文件中。 以下是代码,因为是用vc弄得,所以没有用stdbool.h #include #include #include #include /*数据输入模块*/ //表示文件的结构体 typedef struct _textfile { char name [128]; //表示文件名 char text[1024*128]; //文件中的文本 word* list; //保存单词的链表 int total; //单词总数 float frequency; //单词的词频 }textfile; //读取文件子模块 void readfile (textfile* file) { //参数合法性检查 if(null==file) return; //以只读方式打开textfile结构体关联的文件 file* fp = fopen(file->name,"r"); //如果打开成功,则读取其中的文本内容 if(null != fp) { //逐行读取文件中的文本内容 char line[256]; while( null != fgets(line,256,fp) ) { /*通过将line连接到file->text后面,实现将读取内容保存 到textfile结构体中的字符数组保存*/ strcat(file->text,line); } //读取完毕,关闭文件 fclose(fp); } } /*数据处理模块*/ //清理文本模块(将其中的无效字符替换为空格) void cleantext(char* text) { int i = 0; //遍历访问字符串中的每个字符 while( i { /*盗用标准库函数isalnum()判断当前字符是否是无效字符(不是字母和数字)*/ if( !isalnum(text) ) text=' '; //无效字符替换为空格 ++i; //检查下一个字符 } } //切分单词模块 char* cutword( char* text,char* word) { continchar = 0; //表示字符串中没有字符 int i = 0; //源字符串的索引 int w = 0; //目标字符串的索引 //从源字符串开始文职,逐个字符向后遍历 while( i < strlen(text) ) { //判断当前字符是否是空格符或者换行符 if( (' ' == text) || ('n' == text) ) { if(continchar) break; else ++i; } else { //如果遇到有效字符将其复制到目标字符串中 continchar = 1; word[w] = text; ++i; ++w; } } //在目标字符串加个字符串结束符 word[w] = ' |