要求0、作业要求地址:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110
一、
要求一、git仓库地址:https://git.coding.net/tianjx687/wf.git
二、
要求二、PSP阶段表格
PSP阶段 | 预计所花时间(min) | 实际工作所花时间(min) |
计划 | 90 | 100 |
明确作业要求和其它相关因素,估计时间成本。 | ||
开发 | 1030 | 1130 |
需求分析 | 100 | 120 |
生成设计文档 | 60 | |
设计复审 | 20 | |
代码规范 | 70 | |
具体设计 | 130 | |
具体编码 | 600 | 630 |
代码复审 | ||
测试(自测、修改代码,提交修改) | 30 | |
报告 | 190 | |
测试报告 | 40 | |
计算工作量 | ||
事后总结 |
PSP功能表格:
功能模板 | 具体工作 | 预计时间(min) | 实际时间(min) |
功能一 | |||
300 | 500 | ||
测试(自测) | |||
功能二 | 50 | ||
200 | |||
功能三 | |||
230 | |||
预估耗时和实际耗时之间的差距、原因:
差距:
1.我基本上实际耗时都要大于预估耗时。
原因:
1.提前想到的内容不够全面,等到遇到了就要一个一个解决,这样导致很多时间花在上面了,以后会努力想的全面一些,避免这些麻烦。
2.其实我刚开始想的时候认为自己已经留了充分的时间,但是在我实施的过程中自己做的有点慢,而且遇到一些问题向同学请教,所以导致实际工作时间比预期的要长。
三、解题思路
我刚开始看到有作业发布的时候先看了程序要求,然后是博客要求,看完作业里所有要求后在回过头读程序要求,分析每一个功能怎么实现。因为自己基础不好,所以分析的时候还和同学一起商量怎么实现,有的时候写到一半发现行不通,然后再去问同学才想清楚。在写功能一的时候花的时间最多,功能一遇到的问题是刚开始没看清楚题,只是写的txt文件里的单词的总数,然而重复的单词也算在total里面了,输出的顺序是乱的,主要是自己锻炼的太少了。
四、
功能二、(wf.cpp)我查到freopen就是实现重定向。把预定义的几个标准流文件(stdin)定向到由path指定的文件中。把stdin重定向到input.txt文件中
printf(">wf -f <input.txt\n");
fp=freopen(".\\input.txt","r",stdin);
检测txt文件中的单词是不是我们规定的英文单词,并且大小写英文开头都可以,把小写变成大写。
while(text[i]!='\0')
{
int j=0;
char s[30];
while((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z'))
{
if(text[i]>='A'&&text[i]<='Z')
text[i]+='a'-'A';
s[j++]=text[i++];
}
s[j]='\0';
if(word_map[s]==0)
n++;
word_map[s]++;
if(text[i]=='\0') break;
else
i++;
}
先输出不单词的总数,不包括重复的,然后按照字典顺序输出单词和单词的出现的次数
cout<<"total"<<" "<<n-1<<" words"<<endl<<endl<<endl;
for(it=word_map.begin(),i=1;it!=word_map.end();it++,i++)
{
if(it->first=="")
continue;
cout<<left;
cout<<setw(10)<<it->first;
cout<<setw(10)<<it->second<<endl;
}
cout<<'\n';
运行之后会出现结果,如下:
功能三、(wf3.cpp)主要是输出文章中出现频率最高的三个单词。先对单词按照出现频率排序,然后按顺序输出,只输出排在前三个的单词。
void paixu()
{
int i;
int j;
struct word a;
for(i=0;i<sum;i++)
{
for(j=i+1;j<sum;j++)
if(A[i].num<A[j].num)
{
a=A[j];
A[j]=A[i];
A[i]=a;
}
}
}
int main()
{
int ch;
char s[30];
int i;
int flag=0;
FILE *fp;
fp=fopen(".\\input.txt","r");
if(fp==NULL)
{
printf("此文件不存在!\n");
}
sum=0;
ch=0;
for(i=0;i<1000;i++)
A[i].num=0;
while(ch!=-1)
{
for(i=0;i<30;i++)
s[i]='\0';
ch=fgetc(fp);
if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))
{
for(i=0;;i++)
{
s[i]=ch;
ch=fgetc(fp);
if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))continue;
else break;
}
chuli(s);
}
}
paixu();
printf("Total words is:%d\n",sum);
printf("--------------------:\n");
for(i=0;i<3;i++)
printf("%s :%d\n",A[i].str,A[i].num);
五、我的感想
我感觉这次的作业我发现自己考虑问题并不全面,自己刚开始做作业的时候就写自己想到的那些,后来才逐渐遇到之前没有想到的问题,需要反复改,而且也没有实现有些功能。这次的作业让我觉得代码必须写的规范,否则不要说别人了,就连自己看自己的代码都有点费劲。我觉得自己基础不好,需要学习的地方还有很多,更应该利用现在的机会好好锻炼,多多积累,今后继续努力学习,虚心向别人请教,充实自己。