- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
文件操作与字处理
C语言程序设计综合实验
实验题目: 文件操作与字符处理
实验班级:
学生学号:
学生姓名:
任课教师: 陈湘骥
提交时间: 2012年3月12日
华南农业大学 信息学院
一、题目与运行说明
题目描述
在当前目录中存在文件名为case1.in(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件,其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数,并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出,不足5个单词时,按序输出全部单词)。程序中注意如下细节:
空格、标点符号与回车符起到分隔单词的作用。
文章一行的末尾可能有连字符,出现连字符时,该行最末的字符串与下行最先出现的字符串构一个单词;
名词缩写算一个单词;
数字不算单词;
单词不区分大小写;
输出时单词全使用小写;
数据输入的形式和输入值的范围
读取文件中的单词,以字符的形式读入。取值可以在10000个之中。每个字符组可以包含最多20个字符。
数据输出的形式
在屏幕中,以字符的形式输出单词,以数字的形式输出数量。
程序中所使用的主要变量
使用结构体,用来存放,处理单词。使用整形变量i,j,m,n,t,用来调控循环系统。使用文件指针进行文件操作,使用多种函数,进行排序,比较。使用结构体temp,进行交换时作中间量。
程序所能达到的功能以及出错处理
对文件进行读取,读取文件时,能自动识别单词,把非单词的字符去掉,把带有破折号的单词进行重新合并,进行数量的比较,排序。对总体单词数进行分析,区分开多于5个单词与少于5个单词的功能。
二、程序设计思路
程序流程图如图所示,
将单词留在结构体中,非单词的统统删除将字符串读入结构体中读入文件case1.in
将单词留在结构体中,非单词的统统删除
将字符串读入结构体中
读入文件case1.in
计算相同单词的数量计算不同单词的个数,是不是比5少将单词按字典的顺序进行排序
计算相同单词的数量
计算不同单词的个数,是不是比5少
将单词按字典的顺序进行排序
否是
否
是
将全部单词按序输出将出现次数最多的前
将全部单词按序输出
将出现次数最多的前5个单词及其出现次数输出
三、程序清单
关闭文件,程序结束三、程序清单
关闭文件,程序结束
#includestdio.h
#includestring.h
struct word
{ char b[21];
int num;
}a[10000];
main()
{
char ch;
int i=0,j=0,t,m,n;
struct word temp;
FILE *fp;
fp=fopen(case1.in,r);
while((ch=fgetc(fp))!=EOF) /*将文件内容进行读入,对带破折号的单词进行连接*/
{
if((A=chch=Z)||(a=chch=z))
{a[i].b[j]=ch;
if(A=chch=Z)
{ch=ch+32;a[i].b[j]=ch;}
j++;}
else if(ch==-)
if((ch=fgetc(fp))!=\n)
{i++;j=0;a[i].b[j]=ch;if(A=chch=Z) a[i].b[j]=ch+32;}
else
continue;
else {i++;j=0;}
}
for(;i=0;) /*将非单词从结构体中删除*/
if(a[i].b[0]z||aa[i].b[0])
i--;
else
break;
i++;
for(m=0,n=0;mi;m++)
{while(a[m].b[0]z||aa[m].b[0])
m++;
a[n]=a[m];
n++;}
for(i=0;in-1;i++) /*将单词按字典的顺序进行排序*/
for(j=0;jn-1-i;j++)
if(strcmp(a[j].b,a[j+1].b)0)
{strcpy(temp.b,a[j].b);strcpy(a[j].b,a[j+1].b);strcpy(a[j+1].b,temp.b);}
for(i=0;in;i++)
a[i].num
文档评论(0)