WordCount作业修改
-
需求说明
-
基本需求
-
功能说明
-
PSP
-
-
代码实现
-
字符总数查询
-
单词数查询
-
行数查询
-
-
总结
一、需求说明
1、基本需求
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
2、功能说明
wc.exe -c file.c //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的单词总数
wc.exe -l file.c //返回文件 file.c 的总行数
wc.exe -o outputFile.txt //将结果输出到指定文件outputFile.txt
3、PSP表格
PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10 10
· Estimate · 估计这个任务需要多少时间 10 10
Development 开发 180 340
· Analysis · 需求分析 (包括学习新技术) 5 20
· Design Spec · 生成设计文档 5 10
· Design Review · 设计复审 (和同事审核设计文档) 10 15
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 5
· Design · 具体设计 15 20
· Coding · 具体编码 120 240
· Code Review · 代码复审 5 15
· Test · 测试(自我测试,修改代码,提交修改) 10 15
Reporting 报告 30 37
· Test Report · 测试报告 10 17
· Size Measurement · 计算工作量 10 10
· Postmortem & Process
Improvement Plan · 事后总结, 并提出过程改进计划 10 10
合计 220 387
二、代码实现
1、文件中字符数查询实现
```
int input_file(File s)
{
try
{
FileReader text = new FileReader(s);//读取文件
int inByte;
int i=0;
do
{
inByte =text.read();//按字节读取文件
if(inByte!=-1)
{
char_arr[i++]=((char)inByte);//将文件中的字符赋予数组
}
} while(inByte!=-1);
text.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//定义长度length,从零开始每次自增1,直到char_arr[i]不为'*',此时length即为字符数
for(length=0;char_arr[length]!='*';length++)
{
}
return length;
}
```
2、单词数查询功能
```
int count_Wsum()
{
int word_sum=0;
int index=0;
for(int i=0;i<length;i++)
{
//此处考虑到英文写作中标点符号后会留一个空格,所以需要将多加的标点符号个数减去
if(char_arr[i]==','||char_arr[i]=='.'||char_arr[i]=='!'||char_arr[i]=='?'||char_arr[i]==';'||char_arr[i]==':')
{
word_sum++;
index++;
}
if(char_arr[i]==' ')
{
word_sum++;
}
}
word_sum-=(index-1);
return word_sum;
}
```
在实现查询单词数是,我认为如果文件时按照英文写法的话,每个标点符号后会加一个空格,所以按照每出现一次标点符号以及空格后,单词数+1,然后要减去多加的标点数,所以我设置了一个index,故单词总数为word_sum-=(index-1)。
3、返回行数
```
int count_line(File file)
{
BufferedReader br=null;
int line =0;
String str="";
StringBuffer sb=new StringBuffer();
try {
br=new BufferedReader(new FileReader(file));
while((str=br.readLine())!=null)
{
sb.append(str);
line++;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
if(br!=null)
{
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return line;
}
```
三、总结
这是我第一次使用博客园进行学习,感觉新奇的同时也会觉得烦躁,因为我有时会产生“为什么非要用这东西来进行教学和学习,麻烦”的想法。但是,我想通过博客的方式来进行学习可能会有一种不一样的效果呢也说不定。通过这次作业,我也觉得这样的方式挺新奇的,认真完成作业的话,一定会收益良多。