github源码和工程文件地址:https://github.com/Jackchenyu/Word_counts/tree/smart

基本要求:要实现wc的基本功能即文件中字符数、单词数、行数的统计。

主要功能:文件中字符数、单词数、行数的统计和注释行统计。

设计思想:将文件中的一行字符读完来统计行数,然后运用字符数组再去分别统计字符数和单词数。

程序代码:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
 
int c=0;
int w=0;
int l=0;
int i=0;

void calculate(char * filename)
{
    FILE * fp;
    char a;
    if((fp=fopen(filename,"r"))==NULL)
    {
        printf("%s 读取失败!\n",filename);
        exit(-1);
    }
    while(!feof(fp))        //设置循环,同时判断是否到达文件尾或者发生错误;
    {
        a=fgetc(fp);        //从文件中读取一个字符;
        if(a!=' '&&a!='\n'&&a!='\t'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='=')
            c++;
        if(a==' '||a=='\n'||a=='\t'||a==','||a=='.'||a=='!'||a=='='||a==';')
            w++;
        if(a=='\n'||a=='\t')
            l++;
    }
    l++;
    c--;         
    fclose(fp);
}

int readData(char *filename) //此函数计算英文单词个数
{
    FILE* fp;
    char ch;
    char flag = 0;
    int num=0;
     
    if((fp = fopen(filename,"r")) == NULL)
    {
        printf("%s 读取失败!",filename);
        exit(EXIT_FAILURE);
    }
    printf("%s 读取成功!!!\n",filename);
    while(!feof(fp))        //设置循环,同时判断是否到达文件尾或者发生错误;
    {
        ch = fgetc(fp);        //从文件中读取一个字符;
        if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
            flag = 0;
        else if(flag == 0 && (ch != '-' && ch != '/'&& ch != '\''))
        {
            num++;
            flag = 1;
        }
    }
    fclose(fp);
    return num;
}
 
int main(int argc, char* argv[])             
{
    FILE *fp;
    calculate(argv[2]);
    while(1)
    {
        if((fp=fopen(argv[2],"r"))==NULL)
        {  
        printf("没有找到该文件!\n\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
        continue;
        }
        else if(!strcmp(argv[1],"-c"))                 
            printf("File:%sCharNum:%d\n",argv[2],c);
        else if(!strcmp(argv[1],"-w"))                  
            printf("File:%sWordNum:%d\n",argv[2],w);
        else if(!strcmp(argv[1],"-l"))                
            printf("File:%sLineNum:%d\n",argv[2],l);
        else if(!strcmp(argv[1],"exit"))
        {
            printf("Exit!\n");
            break;
        }
        else
            printf("NullPoint\n");
        printf("\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
    }
    return 0;
     
}

代码借鉴于:http://www.cnblogs.com/changjiangcheng/p/5304120.html

在源码上实现了返回当前目录、子目录所有.c文件的代码行数,空行数,注释行数;在源码的基础上我增加了计算单词个数和计算字符个数这两个功能:“readWord();”“readChar();”

如果有什么不对的地方请多多指教。

软件工程实践小项目之模拟wc.exe的小程序的更多相关文章

  1. 个人项目作业(wc.exe)

    1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...

  2. 个人小项目——Java实现WC功能

    这个小项目用了两种方法解决了该功能的实现. 1.两种方法的功能和具体实现 代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文 ...

  3. 个人项目:实现wc.exe(Java)

    本项目Github地址:https://github.com/NNewBoy/wc 项目相关要求 基本功能:(已实现) -c 统计文件字符数 -w 统计文件词的数目 -l 统计文件行数 扩展功能:(已 ...

  4. 个人项目(WC.exe)(java)(基于图形界面)

    一.Github项目地址:https://github.com/Leungdc/ENhomework 二.PSP: PSP2.1 Personal Software Process Stages 预估 ...

  5. wc.exe指令(C++)

    https://github.com/kielingpao/wc 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.ex ...

  6. Java小项目--坦克大战(version1.0)

    Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...

  7. python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)

    ''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...

  8. 个人项目 wc.exe

    GitHub地址:https://github.com/oAiuo/wordCount 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试. ...

  9. 个人项目作业——wc.exe

    一.Github项目地址 https://github.com/PIPIYing/wc 二.项目概况 项目描述 Word Count 1. 实现一个简单而完整的软件工具(源程序特征统计程序). 2. ...

随机推荐

  1. 并发编程基础之volatile关键字的用法

    一:概念 volatile关键字是一个轻量级的线程同步,它可以保证线程之间对于共享变量的同步,假设有两个线程a和b, 它们都可以访问一个成员变量,当a修改成员变量的值的时候,要保证b也能够取得成员变量 ...

  2. spring mvc接收ajax提交的JSON数据,并反序列化为对象

    需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...

  3. Github Upload Large File 上传超大文件

    Github中单个文件的大小限制是100MB,为了能突破这个限制,我们需要使用Git Large File Storage这个工具,参见这个官方帖子,但是按照其给的步骤,博主未能成功上传超大文件,那么 ...

  4. Maven项目出现Perhaps you are running on a JRE rather than a JDK?

    今天   换了一个IDE  然后 运行 maven的时候 报了一个 这个 错误 我记得以前 我遇到过   所以 把解决方法 记下来吧 原因 maven插件需要使用jdk 的  但是 eclipse默认 ...

  5. Vs code常用插件

    Vs code常用插件 1.View In Browser 由于 VSCode 没有提供直接在浏览器中打开文件的内置界面,所以此插件在快捷菜单中添加了在默认浏览器查看文件选项,以及在客户端(Firef ...

  6. css 背景图片虚化效果

    转载地址:http://blog.csdn.net/ohehehou/article/details/51975539 需求:一个div设置了background: url,现在需要使图片背景模糊,d ...

  7. 关于vue-cli创建项目(小白)(2)mock数据

    mock数据,好处,前后端分离,不用等后端的真实接口,就可以用axios(ek sju s 好像这么读,原谅本人总是根据读音写单词)请求数据了. 一,安装所需插件 根据不同需求选择安装环境,mockj ...

  8. 网页分帧操作<frameset>,<iframe>标签

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. Android100【申明:来源于网络】

    Android100[申明:来源于网络] 地址:http://www.android100.org/html/201406/11/23770.html

  10. 嵌入式常用技术概览之SPI

    一.先决知识             (1)理解并知道移位寄存器如何工作 二.SPI概述             SPI(serial Peripheral Interface 串行片上(外围)设备接 ...