原需求
1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
2.统计英文单词在本文件的出现次数
3.将统计结果排序
4.显示排序结果
新需求:
1.小文件输入. 为表明程序能跑
2.支持命令行输入英文作品的文件名
3. 支持命令行输入存储有英文作品文件的目录名,批量统计
4. 从控制台读入英文单篇作品,重定向输出
代码实现:
在原代码的基础上稍做了修改,使之可以批量读取文件夹下的所有文件,所以加了一个mode来判断是单个文件输入还是文件夹输入,来不及整理程序,所以现在程序有点丑。这次作业交了以后会干两件事,第一是精简程序结构,第二是优化程序性能,可能会重新构思程序的主体部分。
if (mode == )
{
printf("输入读入文件夹的名字:");
scanf("%s", &fa);
if ((fHandle = _findfirst("*.txt", &fa)) == -1L) //文件夹目录
{
printf("当前目录下没有txt文件\n");
return ;
}
else
do
{
fp = fopen(fa.name, "r");
for (i = ; i < ; i++)
{
(w + i)->num = ;
} /****************单词匹配****************************************/
i = ;
while (!feof(fp))//文件尚未读取完毕
{
ch = fgetc(fp);
(w + i)->a[j] = '\0';
if (ch >= && ch <= || ch >= && ch <= ) //ch若为字母则存入
{
(w + i)->a[j] = ch;
j++;
flag = ; //设标志位判断是否存在连续标点或者空格
}
else if (!(ch >= && ch <= || ch >= && ch <= ) && flag == ) //ch若不是字母且上一个字符为字母
{
i++;
j = ;
flag = ;
for (m = ; m < i - ; m++) //匹配单词,若已存在则num+1
{
if (stricmp((w + m)->a, (w + i - )->a) == )
{
(w + m)->num++;
i--;
}
}
}
/****************动态分配内存****************************************/
if (i == (p * )) //用i判断当前内存已满
{
p++;
w = (struct fre_word*)realloc(w, * p*(sizeof(struct fre_word)));
for (n = i; n <= * p; n++) //给新分配内存的结构体赋初值
(w + n)->num = ;
}
}
i = i - ;
quick(w, , i); printf("文件%s词频统计如下\n", fa.name);
printf("不重复的单词数:");
printf("%d\n", i);
for (n = ; n <; n++)
{
printf("文档中出现的单词:");
printf("%-18s", (w + n)->a);
printf("其出现次数为:");
printf("%d\n", (w + n)->num);
}
printf("\n"); } while (_findnext(fHandle, &fa) == );
_findclose(fHandle);
fclose(fp);
return ;
free(w); }
其余部分和之前第一版几乎没有区别,就不再赘述。
运行结果:
功能1:
功能2:
功能3:
功能4:
coding:https://git.coding.net/gongcr/word-frequency.git
openssh:git@git.coding.net:gongcr/word-frequency.git
git:git://git.coding.net/gongcr/word-frequency.git
得分项:
表一:
表二:
项目:词频统计第二版
项目类型:个人项目
项目日期:2016.9.11-2016.9.13
11号
类别c | 内容c | 开始时间s | 结束e | 中断I | 净时间T |
项目实践 | 看书 | 8:00 | 10:00 | 20m | 100m |
项目实践 | 需求分析 | 10:00 | 10:40 | 10m | 30m |
项目实践 | 安装vs |
12号
类别c | 内容c | 开始时间s | 结束e | 中断I | 净时间T |
项目实践 | 调试vs | 8:00 | 10:00 | 0m | 120m |
项目实践 | 重装系统/vs | 12:00 | 16:00 | 0m | 240m |
项目实践 | 效能分析 | 19:00 | 19:40 | 0m | 40m |
项目实践 | 编码 | 20:00 | 22:00 | 20m | 100m |
13号
类别c | 内容c | 开始时间s | 结束e | 中断I | 净时间T |
项目实践 | 查资料 | 8:00 | 10:30 | 0m | 150m |
项目实践 | 编码 | 10:30 | 11:30 | 10m | 50m |
项目实践 | 编码 | 13:40 | 15:00 | 50m | 30m |
项目实践 | 计算工作量 | 15:00 | 15:20 | 0m | 20m |
项目实践 | 写博客 | 20:00 | 21:15 | 0m | 75m |