项目地址:https://github.com/m8705/WordCount

项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。

这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

基本功能列表:(已完成)

  1. wc.exe -c file.c //返回文件 file.c 的字符数
  2. wc.exe -w file.c //返回文件 file.c 的词的数目
  3. wc.exe -l file.c //返回文件 file.c 的行数

扩展功能:(未完成)
    -s   递归处理目录下符合条件的文件。
    -a   返回更复杂的数据(代码行 / 空行 / 注释行)

高级功能:(未完成)

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

PSP

PSP2.1 预计耗时 实际耗时
总体计划 2h 1.5h
预计完成 10h 12h
程序开发 8h 8h
需求分析 0.5h 0.2h
设计文档 0.5h 0.3h
设计复审 0.5h 0.5h
代码规范 0.5h 0.5h
具体设计 1h 1h
具体编码 6h 6h
代码复审 1h 2h
程序测试 2h 2h
程序报告 1h 1h
测试报告 1h 1h
计算工作量 0.5h 0.5h
事后总结 2.5h 2.5h
总计时间 12h 13.5h

解题思路

用C语言Main函数接收参数,对参数进行判断,分别采用不同的方式统计数量即可。

代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. int main(int argc, char *argv[])
  5. {
  6.  
  7. /*
  8. printf("main函数收到了%d个参数\n",argc);//第一个参数默认是可执行文件本身,第二个参数开始是接受到的参数
  9. int i;
  10. for( i = 0; i < argc; i++ ){
  11. printf("%s ",argv[i]);
  12. }
  13. printf("\n");
  14. */
  15.  
  16. if( argc == ){
  17.  
  18. //打印接受到的参数
  19. /*
  20. int i;
  21. printf("收到的外部参数:");
  22. for( i = 1; i < argc; i++ ){
  23. printf("%s ",argv[i]);
  24. }
  25. printf("\n");
  26. */
  27.  
  28. //尝试读取文件的内容
  29. char data;
  30. FILE *fp = fopen(argv[],"r");
  31.  
  32. if(!fp){
  33. printf("错误:文件读取失败\n");
  34. return -;
  35. }
  36.  
  37. //对参数进行判断
  38.  
  39. if( !strcmp(argv[],"-c") ){//字符数
  40. char temp;
  41. int num = ;
  42. temp = fgetc(fp);
  43. while( temp != EOF ){
  44. //putchar(temp);
  45. temp = fgetc(fp);
  46. num++;
  47. }
  48. printf("该文本文件的字符数为:%d\n",num);
  49.  
  50. }
  51. else if( !strcmp(argv[],"-w") ){//单词数
  52. int w = ;
  53. char a = fgetc(fp);
  54. while( a != EOF){
  55. if( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='' && a <='') ){
  56. while( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='' && a <='') )
  57. a =fgetc(fp);
  58. w++;
  59. a =fgetc(fp);
  60.  
  61. }
  62. else
  63. a =fgetc(fp);
  64. }
  65. printf("该文本文件的单词数为:%d\n",w);
  66.  
  67. }
  68. else if( !strcmp(argv[],"-l") ){//行数
  69. char temp;
  70. int num = ;
  71. temp = fgetc(fp);
  72. while( temp != EOF ){
  73.  
  74. //putchar(temp);
  75. if(temp == '\n'){//字符需要用单引号扩住
  76. num++;
  77. }
  78. temp = fgetc(fp);
  79.  
  80. }
  81. printf("该文本文件的行数为:%d\n",num);
  82.  
  83. }
  84. else{
  85. printf("错误:参数超出范围!\n");
  86. printf("允许参数:-c,-w,-l\n");
  87. }
  88. int n=fclose(fp);
  89. }
  90. else{
  91. printf("错误:运行参数必须要3个\n");
  92. printf("用法:wc.exe [parameter] [file_name]\n");
  93. }
  94. system("pause");
  95. return ;
  96. }

运行结果

小结

通过这个项目,我复习了C语言相关知识,同时增进了自己对软件开发流程的理解

WordCount:C语言实现的更多相关文章

  1. WordCount C语言实现求文本的字符数,单词数,行数

    1.码云地址: https://gitee.com/miaomiaobobo/WordCount 2.psp表格 PSP2.1表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) P ...

  2. 个人项目(WordCount C语言)

    WordCount程序(C语言) Github地址:https://github.com/peter-ye-code/WordCount 一.题目描述 实现一个简单而完整的软件工具(源程序特征统计程序 ...

  3. 软件工程-wordcount(C语言实现)

    Github项目地址:https://github.com/xiaobaot/wordcount-wc/tree/master WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数 ...

  4. 结对编程项目——C语言实现WordCount Web化

    结对编程项目 代码地址 201631062219,201631011410 gitee项目地址:https://gitee.com/xxlznb/pair_programming 作业地址:https ...

  5. wordcount(C语言)

    写在前面 上传的作业代码与测试代码放在GitHub上了 https://github.com/IHHHH/gitforwork 本次作业用的是C语言来完成,因为个人能力与时间关系,只完成了基本功能,扩 ...

  6. Scala,Java,Python 3种语言编写Spark WordCount示例

    首先,我先定义一个文件,hello.txt,里面的内容如下: hello sparkhello hadoophello flinkhello storm Scala方式 scala版本是2.11.8. ...

  7. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  8. 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数

    一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...

  9. 利用Scala语言开发Spark应用程序

    Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...

随机推荐

  1. 奖券数目|2015年蓝桥杯B组题解析第一题-fishers

    奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位 ...

  2. (转)MyBatis & MyBatis Plus

    (二期)3.mybatis与mybatis plus [课程三]mybatis ...运用.xmind0.1MB [课程三]mybatis...机制.xmind0.2MB [课程三]mybatis与j ...

  3. git源码阅读

    https://github.com/git-for-windows/git/issues/1854 https://github.com/git-for-windows/git/pull/1902/ ...

  4. VS中自动选择x86或x64的dll

    http://www.cnblogs.com/lzjsky/archive/2010/09/06/1819321.html 原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win ...

  5. winform中splitter的用法

    1.将winform分为三列 整个窗体分成可以自动调节的三列的做法:1.往窗体上丢两个panel控件其中:panelLeft——设置Dock属性为“left”,并调节好其宽度panelRight——设 ...

  6. 【附3】springboot源码解析 - 构建SpringApplication

    package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.sp ...

  7. 论文笔记——SQUEEZENET ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE

    论文地址:https://arxiv.org/abs/1602.07360 模型地址:https://github.com/DeepScale/SqueezeNet 1. 论文思想 提出一种新的卷积组 ...

  8. 《EMCAScript6入门》读书笔记——24.编程风格

  9. Java 类引入 学习记录规整

    之前觉得声明一个类,再把另一个包内的声明数值用第一个类打印出来就可以了(加入引入包类) 结果发现是不对的 看了看demo  得出正确结果    ImportTest 被运行 引入下面的Import类 ...

  10. Apache Kylin1.5.2.1之订单案例详细构建流程

    转:http://blog.itpub.net/30089851/viewspace-2122586/ 一.Hive订单数据仓库构建1. 创建事实表并插入数据 DROP TABLE IF EXISTS ...