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

项目要求

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

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

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

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

wc.exe -c file.c     //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的词的数目
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函数接收参数,对参数进行判断,分别采用不同的方式统计数量即可。

代码

 #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[])
{ /*
printf("main函数收到了%d个参数\n",argc);//第一个参数默认是可执行文件本身,第二个参数开始是接受到的参数
int i;
for( i = 0; i < argc; i++ ){
printf("%s ",argv[i]);
}
printf("\n");
*/ if( argc == ){ //打印接受到的参数
/*
int i;
printf("收到的外部参数:");
for( i = 1; i < argc; i++ ){
printf("%s ",argv[i]);
}
printf("\n");
*/ //尝试读取文件的内容
char data;
FILE *fp = fopen(argv[],"r"); if(!fp){
printf("错误:文件读取失败\n");
return -;
} //对参数进行判断 if( !strcmp(argv[],"-c") ){//字符数
char temp;
int num = ;
temp = fgetc(fp);
while( temp != EOF ){
//putchar(temp);
temp = fgetc(fp);
num++;
}
printf("该文本文件的字符数为:%d\n",num); }
else if( !strcmp(argv[],"-w") ){//单词数
int w = ;
char a = fgetc(fp);
while( a != EOF){
if( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='' && a <='') ){
while( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='' && a <='') )
a =fgetc(fp);
w++;
a =fgetc(fp); }
else
a =fgetc(fp);
}
printf("该文本文件的单词数为:%d\n",w); }
else if( !strcmp(argv[],"-l") ){//行数
char temp;
int num = ;
temp = fgetc(fp);
while( temp != EOF ){ //putchar(temp);
if(temp == '\n'){//字符需要用单引号扩住
num++;
}
temp = fgetc(fp); }
printf("该文本文件的行数为:%d\n",num); }
else{
printf("错误:参数超出范围!\n");
printf("允许参数:-c,-w,-l\n");
}
int n=fclose(fp);
}
else{
printf("错误:运行参数必须要3个\n");
printf("用法:wc.exe [parameter] [file_name]\n");
}
system("pause");
return ;
}

运行结果

小结

通过这个项目,我复习了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. icpc 2017北京 J题 Pangu and Stones 区间DP

    #1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...

  2. 51NOD 1066 Bash游戏

    1066 Bash游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的 ...

  3. 【jdk源码分析】java.lang.Appendable

    1.概述 public interface Appendable 能够被添加 char 序列和值的对象.如果某个类的实例打算接收取自 Formatter 的格式化输出,那么该类必须实现 Appenda ...

  4. ovs-ofctl: s1 is not a bridge or a socket 解决方法

    参考: ovs-vsctl: Error detected while setting up bridge ovs-ofctl: s1 is not a bridge or a socket 解决方法 ...

  5. hibernate报错 java.lang.StackOverflowError: null

    在使用hibernate时,报错 java.lang.StackOverflowError: null 把当前线程的栈打满了 java.lang.StackOverflowError: null at ...

  6. STL_算法_05_集合算法

    ◆ 常用的集合算法: 1. 1.1.第6讲 PPT.40 ◆ set_union() :  构造一个有序序列,包含两个有序序列的并集. 1.2.第6讲 PPT.40 ◆ set_intersectio ...

  7. air for android 使用ANE来获取安卓手机IMEI号

    一首页创建一个ANE文件 1 使用FlashBuilder 或者Eclipse 创建一个新的android项目     A 创建文件Extension.java package com.dabing. ...

  8. Python - Cookie绕过验证码登录

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 另一篇博文  P ...

  9. IdentityServer3零星笔记

    Scope 是什么?有哪几种类型?每种类型都怎么使用? StandardScopes.All是什么概念? 解释:在Scope的Claims属性里包含的所有声明(类型是ScopeClaim,它的name ...

  10. 新的请求方式 fetch和axios

    参考链接:https://www.javascriptcn.com/read-5840.html axios使用文档: https://www.kancloud.cn/yunye/axios/2348 ...