<div class="blogpost-body" id="cnblogs_post_body">
<p><strong>一、开头</strong></p>
<p>(1)合作者:201631107110,201631083416</p>
<p>(2)代码地址:<a href="https://gitee.com/zhaoxiaoqin/WordCount.git">https://gitee.com/zhaoxiaoqin/WordCount.git</a></p>
<p>(3)本次作业链接地址:<a href="https://www.cnblogs.com/zhaoxiaoqin/articles/9824449.html">https://www.cnblogs.com/zhaoxiaoqin/articles/9824449</a></p>
<p><strong>二、正文</strong></p>
<p><strong>1.项目完成情况:</strong></p>
<p><strong>1.1</strong> <strong>基本功能(完成)</strong></p>
<p>wc.exe -c input.c //返回文件 file.c 的字符数</p>
<p>wc.exe -w input.c //返回文件 file.c 的单词总数</p>
<p>wc.exe -l input.c //返回文件 file.c 的总行数</p>
<p><strong>1.2 扩展功能(未完成)</strong></p>
<p>wc.exe -s //递归处理目录下符合条件的文件</p>
<p>wc.exe -a input.c //返回更复杂的数据(代码行 / 空行 / 注释行)</p>
<p>wc.exe -e stopList.txt // 停用词表,统计文件单词总数时,不统计该表中的单词</p>
<p>[file_name]: 文件或目录名,可以处理一般通配符</p>
<p><strong>2.实现代码</strong></p>
<p><strong> 2.1 main函数实现参数传递</strong></p>
<div class="cnblogs_code">
<pre class="blockcode">1 int main(int argc, char* argv[]) {
2 Test(argc, argv);//测试
3 getchar();
4 return 0;
5 }</pre>
</div>
<p><strong>2.2 GetOption函数实现参数解析</strong></p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar">
<span class="cnblogs_code_copy"><a title="复制代码"><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-48304ba5e6f9fe08f3fa1abda7d326ab.gif"></a></span>
</div>
<pre class="blockcode"> 1 int *GetOptions(int argc,char* argv[])
2 {
3 /* 返回0代表参数有错
4 * 1 表示读取字母
5 * 3 表示读取单词
6 * 5 表示读取行数
7 * 它们的和代表所要的功能
8 */
9
10 char* params;
11 for(int i=0;i<argc;i++)
12 {
13 params = argv[i];
14 if(strcmp("-c",params) == 0)
15 {
16 ret[0] += 1;
17 }
18 else if(strcmp("-w",params) == 0)
19 {
20 ret[0] += 3;
21 }
22 else if(strcmp("-l",params) == 0)
23 {
24 ret[0] += 5;
25 }
26 //启动图形界面,则退出命令行结口
27
28 }
29 if(argc > 3) {
30 params = argv[argc - 2];
31 if (strcmp("-o", params) == 0 && argv[argc - 1] != NULL) {
32 result = argv[argc - 1];
33 ret[1] = argc - 3;
34 }
35 else
36 {
37 ret[1]= argc - 1;
38 }
39 }else {
40 ret[1] = argc - 1;
41 }
42 //处理 -o之前缺少输入文件
43 return ret;
44 }</pre>
<div class="cnblogs_code_toolbar">
<span class="cnblogs_code_copy"><a title="复制代码"><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-48304ba5e6f9fe08f3fa1abda7d326ab.gif"></a></span>
</div>
</div>
<p><strong>2.3 WordCount函数根据解析的参数执行相应操作</strong></p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar">
<span class="cnblogs_code_copy"><a title="复制代码"><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-48304ba5e6f9fe08f3fa1abda7d326ab.gif"></a></span>
</div>
<pre class="blockcode"> 1 void WordCount(int argc,char* argv[])
2 {
3 list = createlist();//创建单词列表
4 char* fileName;
5 if (argc <= 1) {
6 Help();
7 exit(0);
8 }
9 GetOptions(argc,argv);
10 fileName = argv[ret[1]];
11 switch(ret[0])
12 {
13 case 1:
14 ReadChar(fileName);
15 break;
16 case 3:
17 ReadWord(fileName);
18 break;
19 case 5:
20 Readlines(fileName);
21 break;
22 case 4: {
23 ReadChar(fileName);
24 flag = 1;
25 ReadWord(fileName);
26 break;
27 }
28 case 6: {
29 ReadChar(fileName);
30 flag = 1;
31 Readlines(fileName);
32 break;
33 }
34 case 8:{
35 ReadWord(fileName);
36 flag = 1;
37 Readlines(fileName);
38 break;
39 }
40 case 9: {
41 CharWordLine(fileName);
42 break;
43 }
44 default:
45 Help();
46 break;
47 }
48 }</pre>
<div class="cnblogs_code_toolbar">
<span class="cnblogs_code_copy"><a title="复制代码"><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-48304ba5e6f9fe08f3fa1abda7d326ab.gif"></a></span>
</div>
</div>
<p><strong>2.4 ReadChar函数实现对文件的字符统计</strong></p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar">
<span class="cnblogs_code_copy"><a title="复制代码"><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-48304ba5e6f9fe |
|