一,需求分析
1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
2.程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
5.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
二,功能设计
1.用户输入任意多个英文单词,显示对应单词在文本中出现的次数和柱状图。
2.用户从键盘输入高频词输出的个数k,按文本中词频数降序显示前k个单词的词频及单词。
3.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
三,设计实现
说明每个部分的算法设计说明(可以是描述算法的流程图)、每个程序中使用的存储结构设计说明(如果指定存储结构写出该存储结构的定义),面向对象的方法,应该给出类中成员变量和成员函数原型声明
四、测试运行
部分代码
while(fscanf(fp,"%s",st)!=EOF)
{ found=0;
for(i=0;i<wordnum;i++)
{ if(strcmp(wl[i].word,st)==0) //字符串的读取
{
wl[i].num++;
found=1;
break; }
} if(!found)
{
strcpy(wl[i].word,st);
wl[i].num=1;
wordnum++; }
} fclose(fp);
if((fp=fopen("14220105.txt","r"))==NULL)
exit(1);
while((c=fgetc(fp))!=EOF)
{
if(c==' ')
++n;
else if(c>='0'&&c<='9')
++j;
else if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
++k;
else ++m
}
fclose(fp)
printf("读取完毕,结果如下: ")
printf("数字%d 字母%d 空格%d 其他%d );//输出结果
}
void shuru()
{char str[100]
char letter[52]
int count[52]={0}
int i;
int lc=0;
cout<<“输入字符串:”<<endl;
scanf("%s",str);
//初始字母表
for(i=0;i<26;i++)
letter[i]='A'+i;
for(i=26;i<52;i++)
letter[i]='a'+i-26;
i=0;
while(str[i]!=' ')
{
if(str[i]!=' ')//字符串未结束
{
if(str[i]>='A'&&str[i]<='Z')
count[str[i]-65]++;
lc++;
}
i++;
}for(i=0,i<52;i++)
{if(count[i]!=0)
printf(%c-%d-%3.2f% ",letter[i],count[i],(float)count[i]/lc*100);
}
}
五、运行结果