1.gitHub地址:https://github.com/loveYuJun/wc.exe.git

2.PSP表格

psp2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 45 50
Estimate 估计这个任务所需时间 45 50
Development 开发 640 520
Analysis 需求分析(学习新技术) 200 150
Design spec 生成设计文档 10 10
Design Review 设计复审 30 15
Coding standard 代码规范(为目前开发制定合适的规范) 10 10
Design 具体设计 30 25
Coding 具体编码 100 120
Code Review 代码复审 60 40
Test 测试(自我测试,修改代码,提交修改) 200 150
Reporting 报告 100 90
Test Report 测试报告 20 30
Size Measurement 计算工作量 20 30
Postmortem & Process Improvement Plan 事后总结,并提出过程修改计划 60 30
合计   785 600

3.解题思路

使用C语言进行读取文件,主要利用C语言中的函数fgetc(),以进行对文档中的字符,词,行的计算。

4.设计实现过程

利用函数fgetc()读取到文件末尾时,会返回一个EOF,以此作为循环结束的条件,可以直接得到字符数;在此循环条件下对读取到的字符进行判定,当字符不为空白符或标点符号时,判定这是一个词的开始,当再次遇到空白或标点符号时,判定一个词的结束;在循环条件下,计算换行符出现的次数,结果加1即为行数。

5.主要代码

//主函数加全局变量
FILE *fp;
char flag;
int main(){
char filename[];
printf("please input filename!\n");
gets(filename);
countchar(filename);
countword(filename);
countline(filename);
} //计算字符数
int countchar(char *filename){
int chars=;
fp=fopen(filename,"r");
flag=fgetc(fp);
for( ; flag!=EOF ; ){
chars++;
flag=fgetc(fp);
}
printf("The char count of the file is %d.\n",chars);
fclose(fp);
return ;
} //j计算词数
int countword(char *filename){
int words=;
fp=fopen(filename,"r");
flag=fgetc(fp);
int inword=false;
for( ; flag!=EOF ;){
if(!isspace(flag)&&!ispunct(flag)&&!inword){
words++;
inword=true;
}
if(inword&&isspace(flag)||ispunct(flag))
inword=false;
flag=fgetc(fp);
}
printf("The word count of the file is %d.\n",words);
fclose(fp);
return ;
} //计算行数
int countline(char *filename){
int lines=;
fp=fopen(filename,"r");
flag=fgetc(fp);
for( ;flag!=EOF ;){
if(flag=='\n')
lines++;
flag=fgetc(fp);
}
lines++;
printf("The line count of the file is %d.\n",lines);
fclose(fp);
return ;
}

6.测试运行

(1)空白文档

(2)单行文档

(3)多行文档

7.项目小结

通过这次的作业,我认识到C语言还有不了解的,同时,在这个过程中,我更加了解了fgetc()函数的使用,了解了一个软件开发的较为具体的过程。

最新文章

  1. web应用 http 响应 url uri
  2. java 中继承,组合,重载,重写的实现原理 (转)
  3. Linux 下Firefox无法打开在'.domain'之前带有中划线的域名
  4. iOS各版本特性
  5. word检视意见导出(VBA)
  6. webkit私有css3属性 -webkit-overflow-scrolling:touch;
  7. Student's Morning
  8. MVC4 数据库连接字串
  9. ASP.NET - 在线编辑器(FreeTextBox)
  10. 设计模式笔记之四:MVP+Retrofit+RxJava组合使用
  11. BZOJ_2068_[Poi2004]SZP_树形DP
  12. 解决本地SqlServer无法连接远程服务器数据库,错误10060
  13. (转)为什么wait(),notify()和notifyAll()必须在同步块或同步方法中调用
  14. Adobe Flex初记
  15. Inviting Friends(hdu3244 && zoj3187)完全背包+二分
  16. xshell连接centos vi编辑器不能使用小键盘
  17. 把UIView转成UIImage,解决模糊失真问题
  18. Selenium+Chrome+PhantomJS爬取淘宝美食
  19. Spring课程 Spring入门篇 6-3 ProxyFactoryBean及相关内容(下)
  20. linux应用之vim的安装与配置(centos)

热门文章

  1. Java基础单词总结
  2. MySQL乱码问题(为什么?追根溯源)
  3. 修改docker中mysql登入密码(包括容器内和本地远程登入的密码)
  4. Rsync服务详解
  5. PHP children() 函数
  6. luogu P4884 多少个1?
  7. spring 命名空间
  8. 44-final, finally, finalize的区别
  9. 用 Python 写个坦克大战
  10. Ant Design Pro入门教程,安装,运行(V5 Typescript版)