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